当前位置: 首页 > 网络应用技术

带你的手柄

时间:2023-03-07 22:46:08 网络应用技术

  摘要:Raspberry Pi是由英国慈善组织“ Raspberry Pi Foundation”开发的微型计算机主板。这篇文章介绍了基于Liteos的Raspberry School移植过程。

  开发委员会:Raspberry Pi 2 B型B(Raspberry Pi 2B)

  CPU:Broadcom BCM2836

  主要频率:900MHz

  内存:1GB

  GPU:Videocore IV GPU

  硬件环境

  该实验使用Raspberry Pi 2模型开发板,USB到TTL模块,SDCARD和读卡器。

  软件环境

  创建目录结构

  在目标目录中添加Raspberry_pi2b目录,并参考RealView-PBX-A9的启动过程,该过程很小,在Cortex-A7体系结构中很小。

  关闭SMP和MMU

  将代码添加到LOS_STARTUP_GCC.S文件中关闭SMP和MMU。

  上表是ACTLR(辅助控制寄存器)寄存器位的功能描述信息。您可以参考Cortex-A7 MPCore技术参考手册。

  上表是SCTLR(系统控制寄存器)寄存器BIT0功能描述信息。您可以参考Cortex-A7MPCore技术参考手册。

  在los_startup_gcc.s中删除enable_scu和secondary_cpu_start。

  制作FPU/Enon

  配置FPU/霓虹灯:

  上面的两行代码用于设置CP10和CP11的访问权限,最后两行用于设置寄存器FPEXC的EN位以启用FPU。

  注意:在ARM合作者的设计中,最多可以支持16个副处理器,通常称为CP0?CP15。

  上表是寄存器CPACR BIT20-23的函数说明信息。有关相关寄存器的更多信息,您可以参考Cortex-A7 MPCore技术参考手册。

  修改链接脚本

  当Raspberry Pi启动时,首先将START.ELF文件加载在SD卡中。该程序将在SD卡中读取config.txt文件的内容。该文件记录一些配置信息。如果未设置启动地址和启动文件,则默认情况下将加载kernel8.img文件。该文件是由AARCH64编译的程序,启动地址为0x80000。如果SD卡中没有kernel8.img镜像文件,则将加载kernel7.img镜像文件。该文件是32位编译器编译程序,启动-up地址为0x8000。RaspberryPi 2b的CPU是32位架构,因此Liteos.ld文件中的启动地址为0x8000。

  堆栈初始化

  启动文件los_startup_gcc.s仅在los_startup_gcc.s中使用svc模式SP寄存器设置,该文件添加了一个新的cpuinit函数,以初始化SP Pointers的其他模式。

  配置动态内存地址

  上面的代码定义OS_SYS_MEM_ADDR是一个动态内存开始地址,LOS_HEAP_ADDR_END是动态内存结束的结尾,OS_SYS_MEM_SIZE是动态内存的大小。

  串行实施

  Raspberry School 2B原理图导致mini_uart串行TXD0和RXD0,相应的引脚为GPIO14和GPIO15,如下图所示:

  创建USART.C和USART.H文件,在USART.C中编写序列初始化函数Uartinit,然后在UART_DEBUG.C文件中实现UART_GETC,UART_HWICREATE,UART_WRITE接口,并实现从Serial Port中实现PRINTF函数。

  适配器中断

  Raspberry Pi 2b的中断属于驱动程序/Interrupt目录中的BCM特定Interrupt Controller.ADD ARM_CONTROL.C文件,并在此文件中的HWICONTROLSOPS结构中实现回调函数。

  上表是中断寄存器的可互换地址。对于读者,请参阅官方芯片手册,以获取与登记册有关的相关信息。

  适应Systick

  Raspberry Pi 2B触发了通过计时器(ARM侧)中断的Systick。有关特定操作详细信息,请参阅文件:驱动程序IMER asp_sysystick.c。

  上面的代码配置计时器计时器触发每1ms中断Systick。

  以上是计时器寄存器的偏移地址。读者想知道详细注册的相关信息,请参考官方芯片手册。

  配置

  修改以下路径makefile(请参阅Gitee仓库的相应文件):驱动程序/计时器/makefiledriver/interrupt/makefiletargets/raspberry_pi2b/makefile

  添加指令$(objcopy)-o二进制$(out)/$@。root目录中的makefile中的elf $(out) /kernel7.img。它用于将生成的ELF文件转换为生成kernel7.img文件。

  使开始SDCARD

  Raspberry Pi图像下载链接:https://www.raspberrypi.org/software/

  到目前为止,Liteos系统已经成功启动和运行。移植项目已在Gitee Liteos社区启动,相关代码链接地址为:https://gitee.com/liteos/liteos/liteos/liteos/liteos/tree/master/master/master/targets/raspberry_pi2b

  参考链接

  [1] Raspberry pihardware -raspberry pi文档:https://www.raspberrypi.org/documentation/hardware/raspberry/raspberry/readme.md

  [2] Raspberry Pi的官方芯片手册:

  https://datasheets.raspberrypi.org/bcm2835/bcm2835- outpherals.pdf

  [3] Cortex-A7 MPCore技术参考手册:

  https://developer.arm.com/documentation/ddi0464/f?lang=en

  资料来源:华为云社区,作者:Lionlace。