zynq开发学习记录:Linux与rt-thread操作系统AMP运行

Linux + RT-Thread

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

memory {

device_type = "memory";

reg = <0x0 0x30000000>;

};/*修改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
void rt_hw_board_init()

{

    rt_components_board_init();

   // rt_console_set_device(RT_CONSOLE_DEVICE_NAME);

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

static void rt_led_thread_entry(void *parameter)

{

    /* do component initialization */

    unsigned char uc = 1;

    while(1)

    {

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

        

                          uc = ~uc;

                          rt_thread_delay(1000);

    }

                         

    /* add your initialization here */

}

int rt_application_init()

{

    rt_thread_t tid;

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

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

        rt_thread_startup(tid);

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

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

        rt_thread_startup(tid);

    return 0;

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

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

    /* 128M cached DDR memory */

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

                     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
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Zynq-7000系列之linux开发学习笔记是一系列关于在Zynq7030数据采集板上进行Linux开发的文章。在这些文章中,作者提供了关于编译Linux内核、制作设备树、安装NFS等方面的指导和经验。在其中一篇文章中,作者遇到了在挂载NFS时出现的问题,提示"wrong fs type, bad option, bad superblock"等错误信息。作者还提供了Linux内核源码的下载链接以及开发环境的相关信息。整个学习笔记的目标是让开发板能够连接外网,并通过NFS挂载到虚拟机上运行一个helloworld程序。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [Zynq-7000系列之linux开发学习笔记:NFS配置与开发板联网(七)](https://blog.csdn.net/Claudedy/article/details/94591622)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Zynq-7000系列之linux开发学习笔记:编译Linux内核和制作设备树(六)](https://blog.csdn.net/Claudedy/article/details/90760085)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值