摘要: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。
