香蕉派,修改 uboot 和 kernel 串口波特率

环境

硬件:bananapi m1
软件:buildroot(uboot-2018.07 + linux-4.18.12)
在这里插入图片描述

默认波特率

编译

$ make bananapi_m1_defconfig
$ make

编译好后,SD 卡烧录镜像 sdcard.img,插入 BPI 启动,默认情况下 uboot 和 kernel 的串口波特率为 115200。我们把串口工具调到 115200,8n1,就可以看到系统启动时的 log 了,包括 uboot 和 kernel 的 log 打印。

修改波特率

如何修改波特率呢?同样也是分为两块,uboot 和 kernel。
先看 uboot,使用 make uboot-menuconfig 命令
在这里插入图片描述
→ Device Drivers → Serial drivers 路径下,将 Default baudrate 改成 57600。然后重新编译 uboot。
其实就是修改 output/build/uboot-2018.07/.config 中的 CONFIG_BAUDRATE

#
# Serial drivers
#
CONFIG_BAUDRATE=57600                                                                                                      
CONFIG_REQUIRE_SERIAL_CONSOLE=y
CONFIG_SPECIFY_CONSOLE_INDEX=y
CONFIG_SERIAL_PRESENT=y
CONFIG_SPL_SERIAL_PRESENT=y
CONFIG_CONS_INDEX=1
CONFIG_DM_SERIAL=y

接着修改 kernel 的串口波特率。不同的板子,不同的镜像,修改的位置是不一样的,我知道的有两种

1. 修改 dts

这里我看到编译好的镜像使用的是 sun7i-a20-bananapi.dtb 这个文件,于是就去修改 output/build/linux-4.18.12/arch/arm/boot/dts/sun7i-a20-bananapi.dts

    chosen {
        // stdout-path = "serial0:115200n8";
        stdout-path = "serial0:57600n8";
    };

重新编译 kernel,再完整编译生成 sdcard.img,重新烧录,串口工具波特率改成 57600,启动
在这里插入图片描述
可以看到,uboot 阶段显示正常,到 kernel 阶段出现了乱码,显然 kernel 的串口波特率并没有修改成功,那问题出现在哪呢?

2. 修改 boot.scr

仔细看了 uboot 的启动 log,没看到加载 sun7i-a20-bananapi.dtb 的打印,却看到了这一句 Found U-Boot script /boot.scr 这句是干嘛的呢?查资料知道,boot.scr 是通过 boot.cmd 编译生成的。
board/bananapi/bananapi-m1/boot.cmd

setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait                                               
  
mmc dev 0
fatload mmc 0 $kernel_addr_r zImage
fatload mmc 0 $fdt_addr_r sun7i-a20-bananapi.dtb

bootz $kernel_addr_r - $fdt_addr_r

看到 boot.cmd 的内容瞬间就找到了答案,波特率是在这里通过启动参数的形式由 uboot 传递给 kernel 的。系统启动后,执行命令 cat /proc/cmdline 也能证实这一点

Welcome to Bananapi M1
buildroot login: root
# cat /proc/cmdline
console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait
#

console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait 这句就是 boot.scr 里面的内容。
下面我们来修改一下
boot.cmd

setenv bootargs console=ttyS0,57600 earlyprintk root=/dev/mmcblk0p2 rootwait                                               
  
mmc dev 0
fatload mmc 0 $kernel_addr_r zImage
fatload mmc 0 $fdt_addr_r sun7i-a20-bananapi.dtb

bootz $kernel_addr_r - $fdt_addr_r

编译

$  mkimage -A arm -T script -O linux -d boot.cmd boot.scr

我们可以不用重新编译并烧录整个镜像,只要单独编译并替换 boot.scr 这个文件就行了。替换后启动
在这里插入图片描述
可以看到,uboot 和 kernel 都以 57600 的波特率正常打印 log 了,通过 cat /proc/cmdline 查看波特率也是 57600。

# cat /proc/cmdline
console=ttyS0,57600 earlyprintk root=/dev/mmcblk0p2 rootwait
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Li-Yongjun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值