環境:Openwrt,MT7620、MT7688
一、修改默認的波特率
當前路徑:uboot
在 ./lib_mips/board.c 中
初始化函數 board_init_f() 里面調用 init_baudrate 來初始化波特率
1 static int init_baudrate (void) 2 { 3 //uchar tmp[64]; /* long enough for environment variables */ 4 //int i = getenv_r ("baudrate", tmp, sizeof (tmp)); 5 //kaiker 6 gd->baudrate = CONFIG_BAUDRATE; 7 /* 8 gd->baudrate = (i > 0) 9 ? (int) simple_strtoul (tmp, NULL, 10) 10 : CONFIG_BAUDRATE; 11 */ 12 return (0); 13 }
而且在文件 ./include/configs/rt2880.h 中配置默認的波特率,將
1 #define CONFIG_BAUDRATE 57600
修改成
1 #define CONFIG_BAUDRATE 115200
使用make V=99完成編譯
二、將Uboot中串口波特率更改為115200,那么在串口工具中如果還是用115200的時候可能會出現亂碼
解決方案:
1、使用工具的問題,比如使用Shell 6、SecureCRT、Putty等等,或者可以使用XCOM進行驗證
2、在串口工具里把波特率改成 117200 即可。
三、在openwrt SDK中將波特率修改成和Uboot中 115200 匹配的波特率
在這個地方修改波特率的時候出現了一點小意外,就是在修改了文件 target/linux/ramips/dts/mt7628an.dtsi (請注意是mt7628an.dtsi,因為我使用的就是此模塊)中
1 bootargs = "console=ttyS0,115200";
之后,重新編譯並且燒寫到開發板上(因為Uboot的原因,此時的串口工具的波特率為 117200 )之后,還是在最后會出現亂碼,將串口工具的波特率調成115200之后,還是亂碼,又換成57600之后,能夠正常顯示,這說明之前的波特率的修改沒有效果。
解決方案:
使用命令 make menuconfig 查看一下目前自己使用的硬件平台。
那么,查看一下對應的 dts 文件,有一個對應的 LINKIT7688.dts 文件,打開並編譯,發現了如下的設置
1 chosen { 2 bootargs = "console=ttyS0,57600"; 3 };
應該是之前設置的波特率並此處的給替換了,到時在kernel啟動過程中在最后才出現亂碼,將他果斷修改成
1 chosen { 2 bootargs = "console=ttyS0,115200"; 3 };
然后編譯,燒寫測試,大功告成!
請注意:
- 此處 Uboot 、openwrt的波特率都設置的的波特率是 115200,串口助手設置為 117200
- 不同的廠家的硬件平台,可能存在自己的配置的 dts 文件,需要查看在他們的 dts 文件中,是否有相關的重復的配置
- 經過實際的測試,mt7628an.dtsi 中的波特率設置實際沒有效果,因為LINKIT7688.dts文件中對此設置有重新設置,但是如果換成MT7628.dts,那么 mt7628an.dtsi 中設置起作用(貌似是廢話。。。)。
問題:
- 在目前的設置中(Uboot波特率 115200,串口工具 117200, openwrt的波特率為 115200)出現一個小的問題,就是在終端進行操作的時候,老感覺有點遲鈍,如果運氣好可能會出現亂碼,這是因為串口工具 117200 的波特率和 openwrt 的 115200 的波特率的誤差導致的部分指令不能識別的原因。
- 后來將openwrt的波特率設置為其他的值,比如 117200、113200等值,出現的情況跟115200的情況一樣,但是整體來說不怎么影響使用,就是不太爽。如果有大佬知道應該怎么調整,請勞煩告知一下,謝謝啦