一、 配置交叉编译器:
内核构建世与宿主机相同的体系架构镜像。嵌入式Linux需要交叉编译,需要设置两个变量ARCH和CORSS_COMPILE
1、 ARCH:表明架构,这里世arm架构;
2、 CORSS_COMPILE:交叉编译器的前缀这里是arm-linux-。在解压的内核文件了,内核顶层的Makefile里面可以看到如下图:
二、 内核的一些命令:
1、 “清除“相关的命令”
clean:删除生成(1)文件,但保留 (2) 配置文件 +(3) 足够编译外部模块的信息文件
mrproper:1+2+3
distclean:~+编译器文件 + 补丁文件
2、 内核裁剪方法:
xconfig:图形化—鼠标(需要QT库的支持,喜欢用鼠标的)
config:一项一项问你(不建议)
nconfig:图形化,不能用鼠标
menuconfig:菜单配置(使用最广泛的,只能用键盘)
3、 编译生成zlmage映像命令
make all:编译所有目标,最终也会生成zlmage
make zlmage:只生产zlmage(模块不会被编译,加快了编译速度)
make ulmage:生成zlmage和ulmage(ulmage世在zlmage前面一个64字节的头信息),执行这条命令需要u-boot编译出来的一个工具mkimage,需要cp tools/mkimage /bin/.config ---uimage世u-boot专用引导文件
4、 最终生成的默认位置arch/arm/boot/
三、 内核配置方法:
1、 生成内核zImage文件,.config。
2、 两方法:
1、 make menuconfig 进行逐项配置, 但是这个太慢, 一般都载入相近配置, 然后再使用 make menuconfig 进行局部修改,具体做法:ls arch/arm/configs/ | grep exynos (查找看有没有和exynos芯片相关的配置)
make exynos4_defconfig(说明:exynos4_defconfig不是这个文件不对专门针对 Tiny4412 这款开发板的, 所有直接使用它配置编译出来内核
可能不能在 Tiny4412 上运行, 还需要进一步调整。)
make menuconfig
2、 根据上面方法 1 的原理, 直接把配置文件复制命名为.config.具体做法
cp arch/arm/configs/exynos4_defconfig .config
make menuconfig
这里我直接用友善之臂提供的tiny4412_linux_defconfig 进行配置
3、 配置以下选项:
-> System Type
-> Support TrustZone-enabled Trusted Execution Environment 配置为[n] (按 n 键取消选择)
然后, 退出保存配置。
四、 写一个类似u-boot的sd_fusing.sh文件
五、 类似u-boot的烧写步骤烧写到SD卡
六、使用u-boot引导内核
启动开发板,进入命令行,设置启动命令bootcmd环境变量
TINY4412 # setenv bootcmd 'movi read kernel 0 40008000;bootm 40008000'
TINY4412 # printenv bootcmd
bootcmd=movi read kernel 0 40008000;bootm 40008000
movi read kernel 0 40008000 从 SD 卡中读取 zImage 到内存的 0x40008000 地址
bootm 40008000 到 0x40008000址引导操作系统
注意:0x40008000 地址不是惟一, 但是不是任意, 一般需要在 40008000 之后。 0x8000 这个偏移是最常用的一个
值。 41000000 , 42000000 都是可以的。
七、重启板子