1. 环境准备搭建Ubuntu开发环境第一次接触嵌入式Linux开发时最让人头疼的就是环境搭建。我当初跟着韦东山老师的视频操作光是配置Ubuntu就反复折腾了三天。这里分享几个血泪教训千万不要用最新版Ubuntu韦老师提供的Ubuntu 18.04_x64.vmx是经过验证的稳定版本用其他版本可能会遇到各种依赖问题。安装VMware时有个小技巧先创建空白虚拟机再导入.vmx文件比直接打开.vmx更稳定。记得分配至少60GB硬盘空间我最初只分配了40GB编译内核时差点爆盘。内存建议4GB起步开太多应用时2GB真的会卡成幻灯片。安装完系统后第一件事是换软件源。我常用阿里云镜像源速度比官方快很多sudo sed -i s/archive.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list sudo apt update sudo apt upgrade -y2. 开发工具全家桶配置2.1 必备软件安装清单MobaXterm比Putty更强大的终端工具支持多标签和文件拖拽上传FileZilla配置SFTP连接时协议要选SFTP而不是FTP端口默认22Source Insight导入内核源码前记得在Options→Preferences→Symbol Lookups里添加arm架构2.2 交叉编译工具链配置这是最容易出错的关键步骤。我遇到过三次环境变量失效的情况后来发现是~/.bashrc文件末尾多了空格。正确配置姿势echo export ARCHarm ~/.bashrc echo export CROSS_COMPILEarm-buildroot-linux-gnueabihf- ~/.bashrc echo export PATH$PATH:/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin ~/.bashrc source ~/.bashrc验证时别只看Tab补全一定要执行arm-buildroot-linux-gnueabihf-gcc -v看到类似gcc version 7.5.0的输出才算真正成功。3. 开发板连接实战3.1 硬件连接避坑指南IMX6ULL开发板上有三个关键接口电源开关那个红色按钮要按到底我第一次轻按没反应还以为板子坏了串口CH340芯片的USB转串口Windows需要单独装驱动网口建议用带指示灯的网线方便观察连接状态3.2 NFS挂载的终极方案传统NFS挂载命令有个大坑网络中断会导致卡死。改良版命令mount -t nfs -o nolock,vers3,tcp,timeo5,retrans5 192.168.5.11:/home/book/nfs_rootfs /mnt参数说明tcp比udp更稳定timeo5超时5秒retrans5重试5次建议在开发板/etc/rc.local添加自启动避免每次手动挂载。4. 从APP到驱动的开发全流程4.1 第一个LED控制程序编译时遇到过unrecognized command line option错误原因是工具链版本不匹配。正确编译姿势arm-buildroot-linux-gnueabihf-gcc -Wall -O2 -o ledtest ledtest.c测试时发现灯不亮先检查设备节点ls /dev/100ask_led*权限不足时要用chmod 666 /dev/100ask_led04.2 驱动编译的隐藏技巧内核版本一定要匹配韦老师提供的是4.9.88。编译前先执行make ARCHarm CROSS_COMPILEarm-buildroot-linux-gnueabihf- 100ask_imx6ull_defconfig make ARCHarm CROSS_COMPILEarm-buildroot-linux-gnueabihf- zImage -j4-j4参数根据CPU核心数调整我用的虚拟机双核就设-j2。编译完记得检查file arch/arm/boot/zImage应该显示ARM Linux kernel image而不是data5. 进阶调试技巧5.1 串口调试神器screen比minicom更轻量的选择screen /dev/ttyUSB0 115200退出按CtrlA然后输入:quit5.2 内核日志实时监控dmesg -wH-w参数实现实时滚动H选项显示人类可读时间5.3 内存泄漏检测在应用层代码编译时添加arm-buildroot-linux-gnueabihf-gcc -fsanitizeaddress -static -o test test.c6. 性能优化实战交叉编译时遇到internal compiler error可能是内存不足解决方法sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile这创建了2GB交换空间编译完记得sudo swapoff /swapfile关闭驱动开发时发现GPIO响应慢试试内核配置make ARCHarm menuconfig在Device Drivers → GPIO → IMX GPIO里开启高速模式7. 开发环境维护定期清理内核编译残留make ARCHarm clean make ARCHarm mrproper备份环境配置的好习惯tar cjvf toolchain_backup.tar.bz2 ~/100ask_imx6ull-sdk/ToolChain遇到NFS挂载失败时先在Ubuntu测试sudo exportfs -v应该能看到/home/book/nfs_rootfs的导出信息