一、u-boot编译及源码分析
1.概念:
uboot是bootloader的一种,主要作用是在内核加载前对硬件设备初始化,并为内核的运行提供引导功能。
2.编译:
1. 解压uboot压缩包,并进入uboot源码目录
tar -zxvf uboot.tar.gz
cd uboot
2. uboot图形界面是基于ncurses库编写的,所以需要先安装该库
sudo apt-get install libncurses5-dev
3. 编译uboot源码
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihfmx6ull_alientek_emmc_defconfig
make V=0 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16
ARCH:指定目标硬件架构CROSS_COMPILE:设置交叉编译工具链
V=0:控制编译输出的详细程度, 0表示启动静默/精简输出模式, 1表示完整的编译命令,便于调试。
4. 生成结果
生成的结果文件主要是位于uboot顶层目录的: u-boot.imx文件
3.uboot烧录
在Ubuntu下利用imxdownload完成u-boot.imx烧写
./imxdownload u-boot.bin /dev/sdb
4、启动后需要配置uboot的参数(在minicom界面配置,板子复位后快速回车进入配置,配置见上一章)
5、uboot配置常用命令与环境变量
1.命令:



示例
mmc dev 1 0
tftp 80800000 u-boo.imx
mmc write 80800000 2 32E
mmc partconf 1 1 0 0
注意:千万不要写SD卡或者EMMC的前两个块(扇区),里面保存着分区表!

2.环境变量
1、bootcmd
bootcmd保存着uboot默认命令, uboot倒计时结束以后就会执行bootcmd中的命令。例如:从emmc中读取内核、设备树、启动:
setenv bootcmd 'mmc dev 1; fatload mmc 1:1 80800000 zImage; fatload mmc
1:1 83000000 imx6ull-alientek-emmc.dtb; bootz 80800000 - 83000000;'
saveenv
从网络中下载内核、设备树、启动
setenv bootcmd 'tftp 80800000 zImage;tftp 83000000 imx6ull-alientekemmc.dtb;bootz 80800000 - 83000000'
saveenv
2、bootargs
bootargs保存着uboot传递给Linux内核的参数,例如:
从emmc中启动Linux系统:
setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
saveenv
从nfs网络中启动Linux系统:
setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs
nfsroot=192.168.1.100:/home/linux/nfs/rootfs,proto=tcp rw
ip=192.168.1.50:192.168.1.100:192.168.1.1:255.255.255.0::eth0:off'
saveenv
二、内核编译及裁剪
1.概念:
内核是操作系统的核心功能代码,是一个大型的开源项目,我们需要对这个源码进行裁剪、编译。我们使用的内核版本为Linux4.1.15
2.编译:
1. 先利用apt-get工具集下载安装lzop工具,安装成功,后续可通过该工具生成zImage文件。

2. 将《驱动资料包\源码\内核》内核文件拷贝到Ubuntu系统中,并对文件进行解压缩。
tar -zxvf 文件名

3. 编译内核
cd linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek/
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_alientek_emmc_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j16
distclean:表示清除之前的编译内容
imx_alientek_emmc_defconfig:将该配置作为内核的.config配置
menuconfig:通过图形界面配置.config
补充:* y 加入内核编译 zImage(包含此功能)
空 n 不加入编译 zImage(不包含)
M m 以模块形式加入编译 zImage(不包含,但是有此功能模块文件.ko,可以动态加载进去) 如下图:方括号只有前两种方式,尖括号三种

all -j16:通过16核编译代码
ARCH=arm:编译arm32位平台
CROSS_COMPILE=arm-linux-gnueabihf-:设置编译工具链
4. 生成结果
结果文件主要有2个:
内核镜像文件: arch/arm/boot/zImage
设备树文件: arch/arm/boot/dts/imx6ull-alientek-emmc.dtb文件

4. 将编译好的两个文件拷贝到tftp管理目录下

5. 通过上一章配置tftp下载设备树和内核镜像后,每次开机即可使用最新版的内核和设备树文件
6. 重新启动开发板,每次从Ubuntu管理目录下载最新版本的内核和设备树文件

7705

被折叠的 条评论
为什么被折叠?



