i.MX6平台LTIB开发环境搭建与优化指南
📅 2026/7/19 5:56:10
👁️ 阅读次数
📝 编程学习
1. LTIB开发环境搭建实战
最近在调试Freescale E9开发板时,遇到了LTIB编译环境搭建的各种坑。作为一款经典的嵌入式Linux镜像构建工具,LTIB在i.MX6平台开发中扮演着重要角色。本文将详细记录在Ubuntu 12.04 64位系统上搭建LTIB环境的完整过程,包含我踩过的所有坑和解决方案。
1.1 环境准备与依赖安装
首先需要准备以下基础环境:
- Ubuntu 12.04 LTS 64位系统(实测16.04/18.04也可用但需要额外调整)
- Freescale官方BSP包:L3.0.35_4.1.0_130816_source.tar.gz
- 至少50GB可用磁盘空间(编译过程会产生大量中间文件)
依赖包的安装是关键第一步,我整理了一个自动化安装脚本:
#!/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 sudo apt-get install -y ccache ncurses-dev zlib1g zlib1g-dev gcc g++ libtool # 64位系统特殊依赖 if uname -a | grep -sq 'x86_64'; then sudo apt-get install -y ia32-libs libc6-dev-i386 lib32z1 fi # 开发辅助工具 sudo apt-get install -y tcl dpkg asciidoc texlive-latex-base sudo apt-get install -y dblatex xutils-dev uuid-dev liblzo2-dev重要提示:Ubuntu 12.04的官方源已不可用,需要修改/etc/apt/sources.list为:
deb http://old-releases.ubuntu.com/ubuntu/ precise main restricted universe multiverse deb http://old-releases.ubuntu.com/ubuntu/ precise-updates main restricted universe multiverse
1.2 BSP包安装与补丁处理
解压BSP包后,运行install脚本时会遇到两个典型问题:
tar zxf L3.0.35_4.1.0_130816_source.tar.gz cd L3.0.35_4.1.0_130816_source ./install问题1:许可证协议确认失败 解决方法:编辑install脚本,找到交互确认部分改为自动接受:
# 修改前 # agree_license=0 # while [ $agree_license -ne 1 ]; do # read -p "Do you accept the EULA? [y/n] " yn # case $yn in # [Yy]* ) agree_license=1; break;; # [Nn]* ) exit 1;; # esac # done # 修改后 agree_license=1问题2:Ubuntu 12.04兼容性问题 需要应用社区补丁:
wget 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 /path/to/ltib2. LTIB编译配置详解
2.1 关键配置步骤
执行./ltib后进入配置界面,针对E9开发板的推荐配置:
- Platform选择:
Platform choice (Freescale iMX reference boards) --->- 处理器选择:
Selection (imx6q) ---> # E9使用i.MX6 Quad核心- 开发板选择:
board (mx6q_sabresd) ---> # 天嵌E9基于SabreSD设计- 文件系统配置:
File System Configuration ---> [*] jffs2 root filesystem [*] tar.gz the root filesystem2.2 常见编译错误处理
错误1:rpm权限问题 解决方法:配置sudo免密码:
sudo visudo # 在文件末尾添加: your_username ALL = NOPASSWD: /usr/bin/rpm, /opt/freescale/ltib/usr/bin/rpm错误2:头文件缺失 创建符号链接解决:
sudo ln -s /usr/include/x86_64-linux-gnu/sys /usr/include/sys错误3:m4编译失败 临时解决方案:
- 编辑ltib目录下的config/platform/imx6q.profile
- 注释掉以下内容:
#package: m4 # section: host # config: --prefix=/usr3. 编译优化与输出处理
3.1 加速编译过程
- 预置软件包缓存:
cp L3.0.35_4.1.0_130816_source/ltib/* /opt/freescale/pkgs/ cd /opt/freescale/pkgs chmod a-x *- 启用ccache加速: 编辑~/.profile添加:
export CCACHE_DIR="/tmp/ccache" export PATH="/usr/lib/ccache:$PATH" mkdir -p /tmp/ccache ccache -M 5G3.2 输出文件说明
成功编译后生成的关键文件:
rootfs/boot/uImage- Linux内核镜像rootfs/boot/u-boot.bin- Bootloader镜像rootfs.jffs2- JFFS2格式根文件系统rootfs.tar.gz- 压缩包格式根文件系统
文件路径结构示例:
/home/ltib/ ├── bin/ ├── dist/ ├── rootfs/ │ ├── boot/ │ │ ├── uImage │ │ └── u-boot.bin │ └── ... └── rpm/4. 开发实战技巧
4.1 自定义软件包添加
在LTIB中添加自定义软件包的步骤:
- 创建包目录结构:
cd /path/to/ltib mkdir -p pkgs/myapp- 编写spec文件模板(pkgs/myapp/myapp.spec):
%define myapp_version 1.0 Name: myapp Version: %{myapp_version} Release: 1 License: GPL Group: Applications/System Source: %{name}-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-build %description My custom application %prep %setup -q %build make %{?_smp_mflags} %install rm -rf %{buildroot} make install DESTDIR=%{buildroot} %files %defattr(-,root,root) /usr/local/bin/myapp- 在ltib配置中启用自定义包: 编辑config/platform/imx6q.profile添加:
package: myapp section: user config: --prefix=/usr/local4.2 内核配置调整
通过LTIB修改内核配置的特殊方法:
- 首先正常编译一次LTIB
- 进入内核配置界面:
cd /path/to/ltib ./ltib -m kernelconfig- 保存配置后需要手动处理:
cp /path/to/ltib/build/linux-3.0.35/.config /path/to/ltib/config/platform/linux-imx6q.config注意:直接修改内核配置可能会被LTIB覆盖,建议通过profile文件进行配置
5. 高级调试技巧
5.1 网络文件系统(NFS)调试
配置LTIB支持NFS根文件系统:
- 修改ltib配置:
./ltib -m config选择:
File System Configuration ---> [*] nfsroot support () NFS server IP address (NEW) () NFS root path (NEW)- 开发板uboot参数设置:
setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs ip=dhcp nfsroot=192.168.1.100:/path/to/nfsroot,v3,tcp' saveenv5.2 交叉编译独立模块
不使用LTIB编译单个驱动模块的方法:
- 准备环境变量:
export ARCH=arm export CROSS_COMPILE=/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-fsl-linux-gnueabi-- 编译示例:
cd /path/to/module make -C /path/to/ltib/rpm/BUILD/linux-3.0.35 M=`pwd` modules6. 经验总结
经过多次实践,我总结了以下关键经验点:
- 目录权限问题:
- LTIB运行时不要使用root账户
- /opt/freescale目录需要普通用户有写入权限
- 网络问题处理:
- 编译前确保能访问外网(部分包需要在线下载)
- 遇到下载失败时,可手动下载后放入/opt/freescale/pkgs
- 版本兼容性:
- BSP版本必须与开发板配套
- 工具链版本要严格匹配
- 编译中断处理:
- 使用./ltib -m clean先清理
- 检查磁盘空间是否充足(至少保留10GB)
- 二进制文件位置:
- 最终生成的uImage和uboot在rootfs/boot目录
- 文件系统镜像在ltib根目录
这套环境搭建方法不仅适用于E9开发板,也可作为其他i.MX6平台开发的参考。在实际项目中,建议将成功编译后的整个/opt/freescale目录备份,后续可直接复用,避免重复配置。
编程学习
技术分享
实战经验