文章目录
一、boot.scr概述
1.1 boot.scr文件介绍
1.2 如何生成boot.scr
二、script.bin概述
2.1 script.bin文件介绍(类似:xxxx.dtb)
2.2 sys_config.fex文件介绍(类似:xxxx.dtb)
2.3 fex2bin与bin2fex文件介绍(类似:dtc)
二、sys_config.fex文件
一、boot.scr概述
参考:LiCheePi_Zero底层开发
1.1 boot.scr文件介绍
根据资料描述 https://github.com/linux-sunxi/u-boot-sunxi/wiki#bootscr-support,u-boot在启动的时候会在第一个分区(FAT/extX格式)寻找/boot.scr或者/boot/boot.scr文件,boot.scr中可以包含用于载入script.bin,kernel,initrd(可选)以及设置内核启动参数的uboot命令。 (相当于uboot的bootcmd启动命令)
1.2 如何生成boot.scr
在uboot工作目录新建 boot.cmd 文件,添加以下内容(即uboot启动命令):
setenv bootargs console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 earlyprintk rw vt.global_cursor_default=0
setenv bootm_boot_mode sec
setenv machid 1029
load mmc 0:1 0x41000000 zImage
#以下两句二选一
#load mmc 0:1 0x41d00000 script.bin#13M偏移
load mmc 0:1 0x41800000 sun8i-v3s-licheepi-zero-dock.dtb#8M偏移
#bootm 0x41000000
bootz 0x41000000 - 0x41800000
#fatload mmc 0 0x43000000 boot/script.bin
#fatload mmc 0 0x48000000 boot/uImage
#也可以不用这么麻烦,用以下命令直接写死在uboot中也行
setenv bootcmd 'load mmc 0:1 0x41000000 zImage;load mmc 0:1 0x41800000 sun8i-v3s-blueberrypi-csi-ov2640-480x272LCD.dtb;bootz 0x41000000 - 0x41800000;'
saveenv
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
详细解释:
1.上述第一行设置uboot的bootargs启动参数,格式为 参数=值,不同参数使用空格分开,其中
console=ttyS0,115200 含义为使用串口ttyS0打印,波特率为 115200
noinitrd 含义为不使用ramdisk(内存磁盘)
init=/init 含义为内核启起来后,进入系统中运行的第一个脚本
root=/dev/mmcblk0p2 含义为指定rootfs的位置为TF卡第二个分区
rootfstype=ext4 含义为根文件系统类型
rootwait 含义为等待设备/dev/mmcblk0p2就绪后才尝试挂载rootfs
panic=5 传递内核参数,当遇到panic(内核严重错误)时等待5秒后重启
更多的参数可以通过查看Linux内核源码目录下Documentation/kernel-parameters.txt文件了解
2.第二行和第三行为将script.bin和内核uImage加载到指定内存地址。fatload是U-Boot中装载linux kernel 到内存的指令(这里用到oad)。
基本用法:fatload <dev[:part]>
interface:所用到接口,如:MMC、USB
dev [:part]: 文件存放的设备 如:ide 0:1
addr: 装载到内存的开始地址。
filename: 装载的文件名称。
bytes: copy的字节数.
3.第四行bootm 用于将内核映像加载到指定的地址
保存文件后,执行以下命令生成boot.scr:
mkimage -C none -A arm -T script -d boot.cmd boot.scr
#-C ==> set compression type 'comp'
#-A ==> set architecture to 'arch'
#-T ==> set image type to 'type'
#-d ==> use image data from 'datafile'
1
2
3
4
5
二、script.bin概述
2.1 script.bin文件介绍(类似:xxxx.dtb)
script.bin是被全志SOC内核驱动或LiveSuit使用的针对特定目标板的二进制配置文件,包含如何设置基于芯片的各种外设,端口,I/O针脚信息。 (相当于设备树,有该信息后就不需要设备树文件了,具体由script.bin还是设备树指定由boot.src中的命令决定),script.bin位于系统卡/盘的第一分区(boot分区)。有些时候 sys_config.fex被命名为script.fex,但其作用是一样的,都为一个文本格式的fex文件。
其对应的可读文本文件格式为FEX,可以利用 Sunxi-tools在二进制和文本文件之间进行转换。
script.bin文件由sys_config.fex文件使用fex2bin生成的
生成script.bin
fex2bin sys_config.fex script.bin
1
2.2 sys_config.fex文件介绍(类似:xxxx.dtb)
sys_config.fex文件定义了各种参数来配置SOC(全志系列的芯片)工作状态或方式。比如它配置GPIOPIN 脚的输入,输出模式或电平的高低,配置DRAM工作状态,配置显示输出模式等等。具体的配置项可以查看sys_config.fex。用户通过修改此文件来达到快速定制系统的目的。
2.3 fex2bin与bin2fex文件介绍(类似:dtc)
fex2bin与bin2fex都是在sunxi-tools工具里面,安装sunxi-tools工具之后才能使用。
fex2bin是将文本fex文件转为二进制bin文件的工具。
bin2fex 是将二进制bin文件转为文本fex文件的工具。
我琢磨着,这似乎是全志在Linux引入设备树框架之前,自己搞的一套“类设备树的系统”
二、sys_config.fex文件
参考:全志平台的 sys_config.fex文件
参考:全志sysconfig.fex配置系统解析
在全志平台上进行开发,大部分的硬件配置都可以在sys_config.fex文件中进行配置和修改,该文件是全志自己的配置文件(类似设备树)。但是在编译过程中,全志内部会将该文件与dts文件进行了合并偶生成dtb文件。
配置项以sys_config.fex文件优先。
合并后的设备树路径:lichee/out/sunXXXX/linux/common/.sunxi.dts
fex目录:lichee/tool/pack/chips/sunXXXX/config/XXXX/sys_config.fex
ex是Allwinner的设备树,用于配置gpio和一些配置。
fex文件不是像dts一样用于解析的,而是fex编译器编译的。
全志跟其他mtk和高通平台不一样,不完全依赖dts和dtsi。
注意:主线Linux内核不使用FEX / script.bin,而是依靠设备树模型(.dtb文件)
总结起来就是:驱动 = driver code + 设备树 +fex配置
————————————————
版权声明:本文为CSDN博主「liefyuan」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_28877125/article/details/124724089