全志平台boot.scr、script.bin文件介绍(“全志设备树系统”)

一、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.上述第一行设置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'

二、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

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配置

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值