LTIB开发环境搭建与i.MX6Q嵌入式Linux移植实战
1. LTIB开发环境搭建实战在嵌入式Linux开发领域Freescale现为NXP的LTIB(Linux Target Image Builder)工具链一直是i.MX系列处理器开发的重要利器。我最近在E9开发板上进行系统移植时完整走了一遍LTIB的配置流程过程中遇到了不少官方文档未提及的坑。这里将详细记录Ubuntu 12.04环境下LTIB的完整配置过程特别针对64位系统的特殊处理方案。1.1 基础环境准备首先需要明确的是Freescale官方BSP对Ubuntu 12.04 64位的支持并不完善。我使用的BSP版本是L3.0.35_4.1.0_130816_source这个版本内核为3.0.35与天嵌科技提供的E9开发板源码兼容性最好。环境搭建的第一步是安装必要的依赖包#!/bin/bash # 基础编译工具链 sudo apt-get install -y gettext libgtk2.0-dev rpm bison m4 libfreetype6-dev # 系统库依赖 sudo apt-get install -y libdbus-glib-1-dev liborbit2-dev intltool ccache sudo apt-get install -y ncurses-dev zlib1g zlib1g-dev gcc g libtool # 文件系统相关 sudo apt-get install -y uuid-dev liblzo2-dev tcl dpkg # 文档生成工具 sudo apt-get install -y asciidoc texlive-latex-base dblatex xutils-dev # 64位系统特殊处理 if uname -a | grep -sq x86_64; then sudo apt-get install -y ia32-libs libc6-dev-i386 lib32z1 fi关键提示在Ubuntu 12.04之后的新版本中ia32-libs已被替代为lib32z1 lib32ncurses5等独立包。如果遇到依赖问题建议使用aptitude替代apt-get它能更好地处理依赖关系。1.2 BSP包的特殊处理解压官方BSP包后直接运行install脚本会遇到权限问题。这里有个隐藏技巧需要先手动创建目标目录并设置权限mkdir -p /opt/freescale/ltib chmod 755 /opt/freescale tar zxvf L3.0.35_4.1.0_130816_source.tar.gz cd L3.0.35_4.1.0_130816_source ./install安装过程中会提示接受协议选择安装路径时建议保持默认的/opt/freescale/ltib。安装完成后必须打上针对Ubuntu 12.04的补丁wget -O ubuntu-ltib-patch.tgz https://community.freescale.com/servlet/JiveServlet/downloadBody/93454-102-3-2834/ubuntu-ltib-patch.tgz tar -xzvf ubuntu-ltib-patch.tgz cd ubuntu-ltib-patch ./install-patches.sh /opt/freescale/ltib这个补丁主要解决了新版Ubuntu中库文件路径变化导致的检测问题。如果不打补丁后续编译时会报package not found错误即使实际上已经安装了相关包。2. LTIB编译配置详解2.1 关键配置文件修改进入/opt/freescale/ltib目录后首次运行./ltib会触发配置界面。这里有几个关键配置点需要特别注意Platform选择保持默认的Freescale iMX reference boardsSoC型号选择imx6q对应E9开发板的i.MX6Q处理器开发板型号选择mx6q_sabresd最接近E9的参考设计配置完成后LTIB会开始自动下载所需的软件包。这里有个加速技巧可以提前将BSP包中pkgs目录下的内容复制到/opt/freescale/pkgscp -r L3.0.35_4.1.0_130816_source/pkgs/* /opt/freescale/pkgs/ chmod a-x /opt/freescale/pkgs/*这个步骤能节省约90%的下载时间因为大多数包都已经包含在BSP中。复制完成后需要修改文件权限否则LTIB会重新下载。2.2 常见编译错误处理在64位系统上编译时最常见的三个错误及解决方案rpm权限问题 在/etc/sudoers文件中添加your_username ALL NOPASSWD: /usr/bin/rpm, /opt/freescale/ltib/usr/bin/rpm替换your_username为实际用户名头文件路径问题cd /usr/include sudo ln -s x86_64-linux-gnu/sys sysm4编译失败 编辑/opt/freescale/ltib/dist/lfs-5.1/m4/m4.spec将BuildRequires行注释掉#BuildRequires: libtool经验之谈每次编译失败后建议先查看/opt/freescale/ltib/bin/LTIB.log文件末尾的详细错误信息。LTIB的错误提示有时比较隐晦需要结合日志中的上下文分析。3. E9开发板特殊适配3.1 板级支持包调整标准LTIB生成的镜像并不能直接用于E9开发板需要进行以下修改在ltib目录下执行./ltib -c进入配置界面后确保选中以下选项Device Drivers - Graphics support - MX6 FrameBuffer supportBootloaders - U-Boot for i.MX6 boards手动修改u-boot配置vi /opt/freescale/ltib/rpm/BUILD/u-boot-2009.08/include/configs/mx6q_sabresd.h修改CONFIG_EXTRA_ENV_SETTINGS中的bootargsbootargsconsolettymxc0,115200 init/init videomxcfb0:devldb,LDB-XGA,ifRGB666 videomxcfb1:off videomxcfb2:off fbmem10M fb0base0x27b00000 vmalloc400M\0 \3.2 文件系统定制E9开发板需要额外的设备节点和初始化脚本在/opt/freescale/ltib/rootfs/etc/init.d/下添加rc.local文件#!/bin/sh /sbin/ifconfig eth0 192.168.1.100 netmask 255.255.255.0 /bin/mount -t nfs -o nolock 192.168.1.1:/root/nfs /mnt exit 0创建必要的设备节点cd /opt/freescale/ltib/rootfs/dev sudo mknod ttymxc0 c 207 16 sudo mknod fb0 c 29 04. 镜像生成与烧写4.1 镜像生成选项LTIB编译完成后会在/opt/freescale/ltib/rootfs目录下生成完整的根文件系统同时在上级目录生成以下关键镜像u-boot.bin位于rootfs/boot/目录下uImage内核镜像同样在rootfs/boot/rootfs.jffs2JFFS2格式的根文件系统镜像如果需要生成SD卡烧写镜像可以使用以下命令cd /opt/freescale/ltib ./ltib -p imx6q -m prep -f uboot ./ltib -p imx6q -m prep -f kernel ./ltib -p imx6q -m prep -f rootfs4.2 烧写技巧对于E9开发板推荐使用mfgtools工具通过USB OTG烧写将开发板拨码开关设置为USB启动模式E9通常为1-ON,2-OFF,3-OFF,4-OFF连接USB OTG接口到PC运行sudo ./uuu -b emmc_all imx6q-sabresd-uboot.bin uImage rootfs.jffs2烧写常见问题如果遇到Device not found错误可能是udev规则未配置。解决方法echo SUBSYSTEMusb, ATTR{idVendor}15a2, MODE0666 | sudo tee /etc/udev/rules.d/51-freescale.rules sudo udevadm control --reload5. 开发调试进阶技巧5.1 网络调试配置在LTIB环境下配置NFS挂载可以极大提高开发效率主机端配置/etc/exports/opt/freescale/ltib/rootfs *(rw,sync,no_root_squash)重启NFS服务sudo service nfs-kernel-server restart目标板启动参数添加root/dev/nfs nfsroot192.168.1.1:/opt/freescale/ltib/rootfs ip192.168.1.100:192.168.1.1:192.168.1.1:255.255.255.0::eth0:off5.2 内核调试技巧对于E9开发板早期串口调试至关重要确保串口线连接正确E9通常使用UART1即开发板上的DEBUG接口使用minicom配置sudo minicom -s设置参数115200 8N1无流控在内核配置中启用早期printkmake menuconfig路径Kernel hacking - Early printk5.3 性能优化建议针对i.MX6Q处理器的特性建议在LTIB配置时启用以下选项内核配置CPU频率调节CONFIG_CPU_FREQNEON加速CONFIG_NEONVFPv3浮点CONFIG_VFPv3U-Boot环境变量优化setenv bootargs consolettymxc0,115200 init/init videomxcfb0:devldb,LDB-XGA,ifRGB666 vmalloc400M cma128M文件系统选择 对于E9的eMMC存储建议使用UBIFS而非JFFS2./ltib -c选择File System - UBIFS support在完成所有这些配置后一个完整的E9开发环境就搭建完成了。这套环境不仅适用于基础开发通过灵活配置也能满足各种定制化需求。后续如果有时间我会继续分享如何在LTIB基础上移植新版内核和U-Boot的经验。