Linux + RT-Thread
1.U-boot、Linux設備樹修改
2.Linux內核啟動參數,修改設置為SMP,CPU個數為1
bootargs "console=ttyPS0,115200 maxcpus=1 root=/dev/ram rw earlyprintk "
3.編譯u-boot、內核
4.修改RT-thread相關文件
- github下載RT-thread最新的4.0.0內核源碼
- github下載RT-thread env工具
- 修改bsp/zynq7000/ drivers /uart.c
//INIT_BOARD_EXPORT(rt_hw_uart_init);
- 修改bsp/zynq7000/drivers/board.h
#define HEAP_END (void*)(0x40000000)
- 修改bsp/zynq7000/drivers/board.c
rt_components_board_init();
// rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
- 修改bsp/zynq7000/applications/application.c
static void rt_led_thread_entry(void *parameter)
/* do component initialization */
*( (unsigned int *) 0x43c00000 ) = uc;
/* add your initialization here */
int rt_application_init()
tid = rt_thread_create("init", rt_init_thread_entry, RT_NULL, 2048,
RT_THREAD_PRIORITY_MAX/3, 20);
tid = rt_thread_create("led", rt_led_thread_entry, RT_NULL, 2048,
RT_THREAD_PRIORITY_MAX/3, 20);
- 修改bsp/zynq7000/rtconfig.h 注釋有關shell、msh、finish、serial以及console相關的宏定義
- 修改bsp/zynq7000/zynq7000.ld 鏈接地址修改為. = 0x30000000;
- 修改libcpu/arm/zynq7000/mmu.c
/* no access to the memory below .text */
/* 128M cached DDR memory */
rt_hw_mmu_setmtt((rt_uint32_t)&__text_start, 0x40000000-1,
- 編譯RT-thread
- 運行env工具,cd bsp/zynq7000
- scons 編譯生成rtthread-zynq7000.elf文件
- 創建BOOT.bin運行
- 利用SDK創建BOOT.bin文件,文件順序為fsbl.elf、zynq.bit(FPGA工程師提供)、u-boot.elf以及rtthread-zynq7000.elf。
- 將生成的BOOT.bin放進SD卡,啟動模式修改為Sd啟動。
- 上電后可以觀察到:
CPU0 終端串口上 Linux啟動正常
CPU1 測試LED一直在閃爍
|