環境
硬體: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 編譯生成的,
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/310615.html
標籤:其他
上一篇:Leetcode初體驗:移除元素 與 洗掉有序陣列中的重復項
下一篇:【寫博客常用】北郵保研隨筆
