u-boot编译及源码分析、linux内核编译及裁剪

一、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管理目录下载最新版本的内核和设备树文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值