1. 程式人生 > >嵌入式Linux修改終端使用的串列埠

嵌入式Linux修改終端使用的串列埠

硬體平臺: ST公司的stm32f429i-discovery
u-boot: emcraft網站提供的u-boot 2010.03
linux: emcraft網站提供的uclinux

我的stm32f429i-discovery剛到手就讓我將USART1的RX管腳給燒壞了,我將串列埠線的RS232電平直接接到了stm32晶片上,好蠢。+/-12V直接懟到3.3V的管腳上,不燒壞才怪呢。沒得辦法,只能改用其它的串列埠,我選著使用USART2來代替USART1.

u-boot部分

修改 u-boot/include/configs/stm32f429-discovery.h 檔案
原檔案:

/*
 * Serial console configuration
 */
#define CONFIG_STM32_USART_CONSOLE
#define CONFIG_STM32_USART_PORT         1       /* USART1 */
#define CONFIG_STM32_USART_TX_IO_PORT   0       /* PORTA */
#define CONFIG_STM32_USART_TX_IO_PIN    9       /* GPIO9 */
#define CONFIG_STM32_USART_RX_IO_PORT   0       /* PORTA */
#define CONFIG_STM32_USART_RX_IO_PIN    10      /* GPIO10 */
#define CONFIG_BAUDRATE                 115200
#define CONFIG_SYS_BAUDRATE_TABLE       { 9600, 19200, 38400, 57600, 115200 }

修改後:

/*
 * Serial console configuration
 */
#define CONFIG_STM32_USART_CONSOLE
#define CONFIG_STM32_USART_PORT         2       /* USART2 */
#define CONFIG_STM32_USART_TX_IO_PORT   3       /* PORTD */
#define CONFIG_STM32_USART_TX_IO_PIN    5       /* GPIO5 */
#define CONFIG_STM32_USART_RX_IO_PORT   3       /* PORTD */
#define CONFIG_STM32_USART_RX_IO_PIN    6       /* GPIO6 */
#define CONFIG_BAUDRATE                 115200
#define CONFIG_SYS_BAUDRATE_TABLE       { 9600, 19200, 38400, 57600, 115200 }

修改後編譯就好了。
make stm32f429-discovery \\從新生成配置檔案
make
這時生成的u-boot.bin使用的就是USART2了,但是Linux kernel使用的 還依然是USART1,這時你會發現u-boot有輸出,kernel沒有輸出。

kernel 部分

第一步:
在Linux原始碼根目錄下執行:make menuconfig
選擇System Type ---> STM32 I/O interfaces --->
在這裡插入圖片描述
去掉USART1,使能USART2.
第二步:
修改u-boot裡的環境變數bootargs,將ttyS0改為ttyS1就好了。
原bootargs:
在這裡插入圖片描述
修改後的bootargs:
在這裡插入圖片描述

第三步:
inittab這個檔案也要修改。
找到這個檔案,可能叫inittab也可能叫inittab.ALL,將裡面的ttyS0改成ttyS1就可以了。
Linux核心引導完成後會呼叫init函式,而init函式需要一個配置檔案inittab。

此時再啟動,Linux就可以正常的在USART2上輸出了!