修改uboot的默认配置文件
-
文件路径
build/boards/cv180x/cv1800b_sophpi_duo_sd/uboot/cvitek_cv1800b_sophpi_duo_sd_defconfig
-
在文件末尾添加
CONFIG_BAUDRATE=460800
修改uboot的芯片源码文件
-
文件路径
u-boot-2021.10/include/configs/cv180x-asic.h
-
源文件
/* config uart */
#define CONSOLEDEV "ttyS0\0"
- 修改后
/* config uart */
#define CONSOLEDEV "ttyS0\0"
#define CONSOLEBAUDRATE CONFIG_BAUDRATE
#define CONFIG_SYS_BAUDRATE_TABLE {9600, 19200, 38400, 57600, 115200, 460800, 921600}
- 源文件
#define CONFIG_EXTRA_ENV_SETTINGS \
"netdev=eth0\0" \
"consoledev=" CONSOLEDEV \
"baudrate=115200\0" \
"uImage_addr=" __stringify(UIMAG_ADDR) "\0" \
"update_addr=" __stringify(UPDATE_ADDR) "\0" \
"mtdparts=" PARTS "\0" \
"mtdids=" MTDIDS_DEFAULT "\0" \
"root=" ROOTARGS "\0" \
"sdboot=" SD_BOOTM_COMMAND "\0" \
OTHERBOOTARGS \
PARTS_OFFSET
- 修改后
#define CONFIG_EXTRA_ENV_SETTINGS \
"netdev=eth0\0" \
"consoledev=" CONSOLEDEV \
"baudrate=" __stringify(CONSOLEBAUDRATE) "\0" \
"uImage_addr=" __stringify(UIMAG_ADDR) "\0" \
"update_addr=" __stringify(UPDATE_ADDR) "\0" \
"mtdparts=" PARTS "\0" \
"mtdids=" MTDIDS_DEFAULT "\0" \
"root=" ROOTARGS "\0" \
"sdboot=" SD_BOOTM_COMMAND "\0" \
OTHERBOOTARGS \
PARTS_OFFSET
-
使用
clean_uboot && build_uboot
进行编译 -
查看这个文件可以看到修改已经生效了
u-boot-2021.10/build/cv1800b_sophpi_duo_sd/u-boot.cfg
#define CONFIG_EXTRA_ENV_SETTINGS "netdev=eth0\0" "consoledev=" CONSOLEDEV "baudrate=" __stringify(CONSOLEBAUDRATE) "\0"
...
#define CONFIG_SYS_BAUDRATE_TABLE {9600, 19200, 38400, 57600, 115200, 460800, 921600}
...
#define CONFIG_BAUDRATE 460800
然后打包插电开机 一看控制台全是乱码
- 翻了下uboot的配置文件可以看到使用的是ns16550兼容驱动
- 驱动文件位于
u-boot-2021.10/drivers/serial/ns16550.c
- 翻阅驱动文件可以发现他时钟是16分的而设备树里面串口0的时钟是25M 所以…
int ns16550_calc_divisor(struct ns16550 *port, int clock, int baudrate)
{
const unsigned int mode_x_div = 16;
return DIV_ROUND_CLOSEST(clock, mode_x_div * baudrate);
}