一 系统移植
系统移植 主要分四个不分由系统启动流程决定
- U-Boot的移植
- Linux内核的移植
- 根文件系统的构建
- 系统烧写
1.1 交叉编译环境
交叉编译器有很多种,我们使用
Linaro
出品的交叉编译器,
Linaro
是一间非营利性质的开
放源代码软件工程公司,
Linaro
开发了很多软件,最著名的就是
Linaro GCC
编译工具链
(
编译
器
)
,关于
Linaro
详细的介绍可以到
Linaro
官网查阅。
Linaro GCC
编译器下载地址如下:
https://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-gnueabihf/
,打开以后下
载界面如图
4.3.1.1
所示:
安装完验证
arm-linux-gnueabihf-gcc -v\
1.2 编译 uboot
开发板光盘
->1
、例程源码
->3
、正点原
子
Uboot
和
Linux
出厂源码
-> uboot-imx-2016.03-2.1.0-ge468cdc-v1.5.tar.bz2
添加编译脚本
mx6ull_alientek_emmc.sh
#!/bin/sh
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_ddr512_emmc_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j4
运行脚本
chmod a+x mx6ull_alientek_emmc.sh
./mx6ull_alientek_emmc.sh
编译后目录如下
u-boot.imx
就是我们最 终要烧写到开发板中的 uboot
镜像文件
uboot
编译好以后就可以烧写到板子上使用了,这里我们跟前面裸机例程一样,将
uboot
烧写到
SD
卡中,然后通过
SD
卡来启动来运行
uboot
。使用
imxdownload
软件烧写,命令如
下:
chmod 777 imxdownload //给予
imxdownload
可执行权限,一次即可
./imxdownload u-boot.bin /dev/sdd //
烧写到
SD
卡,不能烧写到/dev/sda 或
sda1
设备里面!
等待烧写完成,完成以后将
SD
卡插到
I.MX6U-ALPHA
开发板上,BOOT 设置从
SD 卡启
动,使用 USB
线将 USB_TTL 和电脑连接,也就是将开发板的串口
1
连接到电脑上。打开
MobaXterm
,设置好串口参数并打开,最后复位开发板。在
MobaXterm
上出现“
Hit any key to
stop autoboot:
”倒计时的时候按下键盘上的回车键,
默认是 3 秒倒计
时,在
3
秒倒计时结束以
后如果没有按下回车键的话
uboot
就会使用默认参数来启动
Linux
内核了。如果在
3
秒倒计时
结束之前按下回车键,那么就会进入
uboot
的命令行模式,
比较重要的环境变量 命令使用
bootcmd bootargs
加载zImage相关环境变量 这里使用fatload 加载到 mmc
mmcroot=/dev/mmcblk1p2
内核设备树文件
定义位置
这是很多文档没有说明清楚的地方 uboot编译后 加载设备树的路径已经指明 规则因厂商版本可能不同, 在使用 MfgTool烧写自定义zIMage 时 需要匹配好dtb文件名
1.3 搭建烧写网络环境
从网络启动
linux
系统的唯一目的就是为了调试!不管是为了调试
linux
系统还是
linux
下
的驱动。每次修改
linux
系统文件或者
linux
下的某个驱动以后都要将其烧写到
EMMC
中去测
试,这样太麻烦了。我们可以设置
linux
从网络启动,也就是将
linux
镜像文件和根文件系统都
放到
Ubuntu
下某个指定的文件夹中,这样每次重新编译
linux
内核或者某个
linux
驱动以后只
需要使用
cp
命令将其拷贝到这个指定的文件夹中即可,这样就不用需要频繁的烧写
EMMC
,
这样就加快了开发速度。我们可以通过
nfs
或者
tftp
从
Ubuntu
中下载
zImage
和设备树文件,
根文件系统的话也可以通过
nfs
挂载,不过本小节我们不讲解如何通过
nfs
挂载根文件系统,这
个在讲解根文件系统移植的时候再讲解。
这里我们使用
tftp
从
Ubuntu
中下载
zImage
和设备树 文件,
1 首先调通板子和ubuntu P
CIE以太网 板子紧靠着串口的一个
(ubuntu 虚拟机网络配置)
setenv ipaddr 192.168.1.113
setenv ethaddr 00:90:F5:F1:6C:87
setenv gatewayip 192.168.1.1
setenv netmask 255.255.255.0
setenv serverip 192.168.1.122
saveenv
配置成功
2 sudo service tftpd-hpa start (tftp环境配置)
1.4 烧写内核
copy zImage到 tftp server目录
chmod 777 zImage
4
zImage
文件下载到开发板
DRAM
的
0X80800000
地址处
1.5接着烧写设备树 imx6ull-14x14-emmc-4.3-800x480-c.dtb
而非 imx6ull-14x14-emmc-7-1024x600-c.dtb
uboot启动信息未看到屏幕信息
printenv 打印环境变量查看屏幕型号和尺寸 确定设备树文件为
从正点原子出厂固件copy imx6ull-14x14-emmc-4.3-800x480-c.dtb 到tftp目录
imx6ull-14x14-emmc-4.3-480x272-c.dtb
tftp 83000000 i
mx6ull-14x14-emmc-4.3-800x480-c.dtb
#tftp 83000000 imx6ull-14x14-emmc-4.3-480x272-c.dtb
bootz 80800000 - 83000000
注意修改权限
VFS: Cannot open root device "(null)" or unknown-block(0,0): error -6
Please append a correct "root=" boot option; here are the available partitions: ??
答: 根文件系统缺失错误
1.6 根文件系统烧写
Linux
内核启动以后是需要根文件系统的,根文件系统存在哪里是由
uboot
的
bootargs
环境
变 量 指 定 ,
bootargs
会 传 递 给
Linux
内 核 作 为 命 令 行 参 数 。 比 如 上 一 小 节 设 置
root=/dev/mmcblk1p2
,也就是说根文件系统存储在
/dev/mmcblk1p2
中,也就是
EMMC
的分区
2
中。这是因为正点原子的
EMMC
版本开发板出厂的时候已经
EMMC
的分区
2
中烧写好了根文
件系统,所以设置
root=/dev/mmcblk1p2
。如果我们不设置根文件系统路径 就会出现以上错误;
正点原子 mfgTool烧写的出厂系统 uboot日志
//start kernel
未发现设备树文件日志
但根据环境变量得知
imx6ull-14x14-emmc-4.3-800x480-c.dtb
bootcmd启动先findfdt