全志V3s开发板实战配置手册:从boot.scr到script.bin的深度解析
第一次拿到全志V3s开发板时,那种既兴奋又忐忑的心情至今记忆犹新。作为一款性价比极高的嵌入式处理器,V3s在物联网和智能硬件领域有着广泛的应用。但当我真正开始配置启动参数时,才发现从u-boot到内核启动的每一步都暗藏玄机。本文将分享我在LicheePi Zero等V3s开发板上积累的实战经验,特别是boot.scr和script.bin这两个关键文件的配置技巧。
1. 开发环境搭建与工具准备
在开始配置之前,确保你的开发环境已经准备就绪。不同于x86平台的开发,嵌入式Linux开发需要一些特定的工具链和工具。
首先需要安装交叉编译工具链。对于V3s这类ARM Cortex-A7架构的芯片,推荐使用Linaro或官方提供的工具链:
sudo apt-get install gcc-arm-linux-gnueabihf接下来是几个关键工具的安装,这些工具在后续配置中将起到至关重要的作用:
- mkimage:用于将boot.cmd转换为boot.scr
- fex2bin/bin2fex:用于sys_config.fex和script.bin之间的转换
获取这些工具的最简单方式是从全志官方资源或社区维护的仓库中获取:
git clone https://github.com/linux-sunxi/sunxi-tools cd sunxi-tools make && sudo make install提示:在编译sunxi-tools时,可能会缺少一些依赖库,可以通过
sudo apt-get install libusb-1.0-0-dev等命令安装所需依赖。
工具安装完成后,建议创建一个专门的工作目录来管理V3s的相关文件:
~/v3s_workspace/ ├── boot/ # 存放boot相关文件 ├── fex/ # 存放sys_config.fex ├── kernel/ # 内核源码 └── uboot/ # u-boot源码2. boot.scr的深度解析与实战配置
boot.scr是u-boot启动过程中读取的脚本文件,它决定了内核如何被加载以及传递哪些参数。理解它的工作原理可以避免很多启动问题。
2.1 boot.cmd文件结构剖析
boot.scr是由boot.cmd通过mkimage工具生成的,因此我们需要首先理解boot.cmd的编写规则。一个典型的boot.cmd包含以下几个关键部分:
# 设置内核启动参数 setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait panic=10 earlyprintk rw # 加载内核映像 load mmc 0:1 0x41000000 zImage # 加载设备树文件 load mmc 0:1 0x41800000 sun8i-v3s-licheepi-zero.dtb # 启动内核 bootz 0x41000000 - 0x41800000每个部分的注意事项:
bootargs参数:
console=ttyS0,115200:指定调试串口,V3s通常是ttyS0root=/dev/mmcblk0p2:根文件系统位置,p2表示第二分区panic=10:内核崩溃后的重启延迟earlyprintk:早期内核打印,便于调试
加载地址:
- 内核(zImage)通常加载到0x41000000
- 设备树(dtb)加载到0x41800000
- 这些地址不能与内存其他用途冲突
2.2 常见问题与解决方案
在实际配置中,经常会遇到以下问题:
问题1:内核加载后无法启动
可能原因:
- 加载地址不正确
- 设备树不匹配
- 内存配置错误
解决方案:
# 在u-boot命令行中测试内存访问 md 0x41000000 # 检查设备树是否正确加载 fdt addr 0x41800000 fdt print问题2:LCD屏幕无法正常显示
需要在bootargs中添加视频参数:
setenv video-mode sunxi:480x272-18@60,monitor=lcd setenv lcd-mode x:480,y:272,depth:18,pclk_khz:10000,le:42,ri:8,up:11,lo:4,hs:1,vs:1,sync:3,vmode:0 setenv stderr serial,lcd setenv stdout serial,lcd2.3 生成boot.scr的完整流程
准备好boot.cmd后,使用以下命令生成boot.scr:
mkimage -C none -A arm -T script -d boot.cmd boot.scr然后将boot.scr复制到TF卡的第一分区:
sudo cp boot.scr /media/user/boot/注意:确保TF卡的第一分区是FAT格式,因为u-boot只能读取FAT文件系统。
3. script.bin的配置艺术
script.bin是全志平台特有的配置文件,由sys_config.fex转换而来,包含了SoC的各种硬件配置信息。
3.1 sys_config.fex关键配置解析
sys_config.fex是一个文本文件,包含了丰富的配置选项。以下是一些关键配置项:
LCD显示配置:
[lcd0_para] lcd_used = 1 lcd_driver_name = "default_lcd" lcd_x = 480 # 水平分辨率 lcd_y = 272 # 垂直分辨率 lcd_dclk_freq = 1 # 像素时钟频率 lcd_hbp = 46 # 水平后沿 lcd_ht = 1055 # 水平总时间 lcd_vbp = 23 # 垂直后沿 lcd_vt = 525 # 垂直总时间触摸屏配置:
[ctp_para] ctp_used = 1 ctp_name = "gt911_m785q6" ctp_twi_id = 0 ctp_twi_addr = 0x48 ctp_screen_max_x = 480 ctp_screen_max_y = 272 ctp_exchange_x_y_flag = 1 # 交换X/Y坐标GPIO配置:
[gpio_para] gpio_used = 1 gpio_num = 2 gpio_pin_1 = port:PG00<1><default><default><1> gpio_pin_2 = port:PG01<1><default><default><0>3.2 配置技巧与常见陷阱
内存配置: V3s的内存配置非常关键,错误的配置会导致系统不稳定或无法启动。确保
[dram_para]部分与你的硬件匹配:[dram_para] dram_clk = 360 dram_type = 3 dram_zq = 0x3b dram_odt_en = 1时钟配置: 时钟配置错误会导致外设工作异常。
[clock_para]部分需要谨慎修改:[clock_para] pll_video = 0x81004107 pll_ve = 0x81001003电源管理: 不正确的电源配置可能导致系统不稳定:
[power_sply] dc1sw_vol = 3000 aldo1_vol = 3300 aldo2_vol = 1800
3.3 生成script.bin的完整流程
配置好sys_config.fex后,使用以下命令生成script.bin:
fex2bin sys_config.fex > script.bin然后将script.bin复制到TF卡的第一分区:
sudo cp script.bin /media/user/boot/验证script.bin是否正确生成的小技巧:
bin2fex script.bin > test.fex diff sys_config.fex test.fex4. 调试技巧与故障排除
即使按照上述步骤配置,仍然可能会遇到各种问题。这里分享一些实用的调试技巧。
4.1 u-boot环境变量操作
u-boot提供了丰富的命令来检查和修改环境变量:
# 打印所有环境变量 printenv # 设置新的环境变量 setenv my_var value # 保存环境变量 saveenv # 测试boot.scr source ${loadaddr}4.2 常见启动问题排查表
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 卡在u-boot | boot.scr错误 | 检查boot.cmd语法,重新生成boot.scr |
| 内核panic | 设备树不匹配 | 确认dtb文件与硬件版本一致 |
| LCD无显示 | 时钟或时序配置错误 | 检查lcd0_para参数,特别是时序值 |
| 触摸屏不工作 | I2C地址错误 | 使用i2cdetect检查设备地址 |
4.3 内存与地址调试技巧
当遇到内存相关问题时,可以使用以下方法调试:
# 测试内存读写 mw 0x41000000 0x12345678 md 0x41000000 # 检查设备树加载 fdt addr 0x41800000 fdt print /memory4.4 使用网络启动进行快速调试
为了加快调试速度,可以配置网络启动:
setenv serverip 192.168.1.100 setenv ipaddr 192.168.1.200 tftp 0x41000000 zImage tftp 0x41800000 dtb bootz 0x41000000 - 0x418000005. 高级配置与性能优化
当基本功能正常工作后,可以考虑进行一些高级配置和性能优化。
5.1 内核启动参数优化
通过调整bootargs可以优化系统性能:
# 添加如下参数可以提升性能 setenv bootargs ${bootargs} initcall_debug ignore_loglevel5.2 文件系统选项
根据使用的文件系统类型,可以添加特定的挂载选项:
# 对于ext4文件系统 setenv bootargs ${bootargs} rootfstype=ext4 data=writeback # 对于overlayfs setenv bootargs ${bootargs} rootfstype=overlay5.3 电源管理配置
优化电源管理可以显著降低功耗:
[power_sply] aldo1_vol = 3300 aldo2_vol = 1800 aldo3_vol = 3300 dldo1_vol = 3300 dldo2_vol = 33005.4 内核模块预加载
如果需要预加载某些内核模块,可以在sys_config.fex中配置:
[module_para] module_num = 2 module_path_1 = "/lib/modules/g_serial.ko" module_path_2 = "/lib/modules/sunxi_emac.ko"经过多次项目实践,我发现V3s开发板最棘手的问题往往不是配置本身,而是硬件差异带来的细微变化。建议在开始任何新项目前,先花时间彻底了解自己的硬件规格,记录下所有关键参数,这将为后续开发节省大量时间。