1.Uboot移植
uboot是一段运行平台初始化的代码!
uboot分为 BL1、 BL2、 uboot.bin
uboot是一个相对比较复杂的裸机程序!
源码包:uboot_tiny4412-sdk1506.tar.bz2
移植步骤:
- 把源码包使用共享文件夹复制到linux下的 /work目录
命令:
mkdir /work
cd /work
cp /mnt/hgfs/xxx/uboot_tiny4412-sdk1506.tar.bz2 /work
2.解压源码包,进入解压后的目录
命令:
tar -xf uboot_tiny4412-sdk1506.tar.bz2
cd uboot_tiny4412-sdk1506
3.编译uboot源码、得到bl1.bin bl2.bin uboot.bin
命令:
在uboot源码包顶层目录输入:
make clean //清除编译过程中生成的中间文件
make distclean //清除源码中的配置信息
make tiny4412_config //配置当前uboot适用平台
make -j4 //编译源码
4.烧录uboot到SD卡
命令:
cd sd_fuse/tiny4412/
/sd_fusing.sh /dev/sdb
5.烧录完成!拔出SD卡,放入到开发板!
2.内核裁剪移植
menuconfig配置详解:https://blog.csdn.net/fanle76/article/details/52330265
内核源码是大量模块代码的集合!
每一个模块代码都是大量的.c 和 .h文件组成的!
内核是系统所有功能的集合!
内核镜像是一个二进制文件,是一个大型可执行程序!
内核源码包:linux-3.5.buildok.tar.gz
内核移植步骤:
- 把内核源码包复制到linux系统下的 /work/目录下,并解压!
命令:
cp /mnt/hgfs/xxxxx/linux-3.5.buildok.tar.gz /work/
cd /work
tar xf linux-3.5.buildok.tar.gz
2.解压完成后,进入解压后目录。
命令:
cd linux-3.5/
3.内核源码裁剪,去掉不需要的模块,保留需要的模块!
命令:
make clean
make distclean
cp tiny4412_linux_defconfig .config
make menuconfig
进入配置菜单:
system type
--> Support TrustZone-enabled Trusted Execution Environment [去掉该选项]
保存退出!
4.编译内核源码,生成内核镜像zImage。路径:arch/arm/boot/zImage
命令:
make -j8
5.进入内核镜像所在目录,编写烧录脚本,烧录zImage镜像!
命令:
cd arch/arm/boot/
vim sd_fusing.sh
编辑:(seek=1057 是bl1、bl2的大小)
#!/bin/bash
if [ -e /dev/sdb ]
then
echo fusing...
dd iflag=dsync oflag=dsync if=./zImage of=/dev/sdb seek=1057
else
echo /dev/sdb is not find!
exit -1
fi
echo fused OK!!!
chmod 777 sd_fusing.sh
6.烧录: 插入SD卡
./sd_fusing.sh
7.烧录完成,拔出SD卡!
补充: 内核源码的默认配置文件是: .config 内核配置方法有以下三种: 方法1:在终端一个一个功能的询问! make config 方法2:Qt风格的内核配置菜单 make xconfig 方法3:由shell脚本勾画出来的内核配置菜单 make menuconfig menuconfig菜单使用方法: 上下键:选项之间切换 左右键:操作方式之间切换 <select exit help> 空格键:对选项进行选择<勾选/取消> 回车键:执行操作 <进入下级菜单(select),返回上级菜单(exit)>
怎么把一个外来的模块代码添加到内核中! 需要文件:Makefile Kconfig 源码 Makefile编写格式: obj-$(CONFIG_xxxx) += xxyy.o Kconfig编写格式: 菜单选项声明:<二选一> 声明后面跟随 要定义的Makefile变量! menuconfig :声明一个用于配置Makefile的变量。每一个变量对应一个菜单选项。 以menuconfig声明的菜单选项,拥有子菜单! config : 声明一个用于配置Makefile的变量。每一个变量对应一个菜单选项。 以config声明的菜单选项,没有子菜单! Makefile变量配置方式:<二选一> 其后跟随 菜单选项名称 bool :该变量对应的选项只有两种配置结果! [y / n] tristate :该变量对应的选项有三种配置结果! <y / m/ n>
default :该变量对应的选项的默认配置结果! depends on :该变量对应的选项配置的时候,需要依赖的条件。(该选项配置的前置条件) select : 跟随该变量改变而改变的变量! (跟随变量会自动根据当前变量的值而同步改变) help :描述信息! 随意... 注意:Kconfig编写好之后,需要在上级目录下的Kconfig中调用! |