嵌入式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上輸出了!