分享

zynq开发学习记录:Linux与rt...

 云将东游 2021-07-20

Linux + RT-Thread

1.U-boot、Linux设备树修改

  1. memory {

  2. device_type = "memory";

  3. reg = <0x0 0x30000000>;

  4. };/*修改CPU0地址空间范围*/

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
  1. void rt_hw_board_init()

  2. {

  3.     rt_components_board_init();

  4.    // rt_console_set_device(RT_CONSOLE_DEVICE_NAME);

  5. }
  • 修改bsp/zynq7000/applications/application.c
  1. 添加线程代码,周期控制测试Led闪烁:

  2. static void rt_led_thread_entry(void *parameter)

  3. {

  4.     /* do component initialization */

  5.     unsigned char uc = 1;

  6.     while(1)

  7.     {

  8.               *( (unsigned int *) 0x43c00000 ) = uc;



  9.                           uc = ~uc;

  10.                           rt_thread_delay(1000);

  11.     }



  12.     /* add your initialization here */

  13. }

  14. int rt_application_init()

  15. {

  16.     rt_thread_t tid;

  17.     tid = rt_thread_create("init", rt_init_thread_entry, RT_NULL, 2048,

  18.                             RT_THREAD_PRIORITY_MAX/3, 20);
  19.     if (tid != RT_NULL)

  20.         rt_thread_startup(tid);

  21.    tid = rt_thread_create("led", rt_led_thread_entry, RT_NULL, 2048,

  22.                             RT_THREAD_PRIORITY_MAX/3, 20);
  23.     if (tid != RT_NULL)

  24.         rt_thread_startup(tid);

  25.     return 0;

  26. }
  • 修改bsp/zynq7000/rtconfig.h 注释有关shell、msh、finish、serial以及console相关的宏定义
  • 修改bsp/zynq7000/zynq7000.ld  链接地址修改为. = 0x30000000;
  • 修改libcpu/arm/zynq7000/mmu.c
  1. /* set page table */

  2.     /* no access to the memory below .text */

  3.     /* 128M cached DDR memory */

  4.     rt_hw_mmu_setmtt((rt_uint32_t)&__text_start, 0x40000000-1,

  5.                      0x30000000, RW_CB);

 

  • 编译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一直在闪烁

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多