手把手带你做LiteOS的树莓派移植

2022-12-22 0 254

全文:X3100派是爱尔兰的公益组织机构“Raspberry Pi 促进会”合作开发的这款如前所述arm的小型新买。责任编辑如是说如前所述LiteOS的X3100派移殖操作过程。

责任编辑撷取自宏碁云街道社区《2021 LiteOSX3100派移殖手册(一)》,译者: Lionlace 。

X3100派是爱尔兰的公益组织机构“Raspberry Pi 促进会”合作开发的这款如前所述arm的小型新买。责任编辑如是说如前所述LiteOS的X3100派移殖操作过程。

硬体重要信息

N53SI241SV:Raspberry Pi 2 Model B(X3100派2B)

CPU:Broadcom BCM2836

TNUMBERGHz:900MHz

缓存:1GB

GPU:VideoCore IV GPU

移殖预备

硬体自然环境

本试验采用了Raspberry Pi 2 Model BN53SI241SV、USB转TTL组件、SDcard和移动硬盘。

应用软件自然环境

本试验须要先依照码云上的LiteOS讲义构筑好linux自然环境(make、arm-none-eabi校对辅助工具链)。自然环境构筑讲义:https://gitee.com/LiteOS/LiteOS/blob/master/doc/LiteOS_Build_and_IDE.md本试验须要浏览非官方的快照制做辅助工具(Raspberry Pi Imager),浏览门牌号:https://www.raspberrypi.org/software/

移殖关键步骤

建立产品目录内部结构

在targets产品目录下追加Raspberry_Pi2B产品目录,参照与cortex-A7构架差别较细的realview-pbx-a9的开启业务流程展开移殖。

将realview-pbx-a9产品目录下的reset_vector.S和main.c复制到Raspberry_Pi2B产品目录下并将reset_vector.S重命名为los_startup_gcc.S。将realview-pbx-a9产品目录下的board.ld和liteos.ld中内容合并到Raspberry_Pi2B目录下liteos.ld文件中。拷贝realview-pbx-a9产品目录下include、os_adapt文件夹到Raspberry_Pi2B产品目录下,并删除不须要的dma相关头文件include/asm/dma.h。

关闭SMP和MMU

在los_startup_gcc.S文件中增加关闭SMP和MMU的代码。

关闭SMP功能
mrc p15, 0, r0, c1, c0, 1 bic r0, r0, #0x40 mcr p15, 0, r0, c1, c0, 1
手把手带你做LiteOS的树莓派移植

上表是ACTLR(Auxiliary Control Register)寄存器bit6功能描述重要信息,了解更多寄存器相关重要信息可以参照Cortex-A7 MPCore Technical Reference Manual。

关闭MMU的功能
mrc p15, #0, r0, c1, c0, #0 bic r0, r0, #1 mcr p15, #0, r0, c1, c0, #0 @ clear mmu bit
手把手带你做LiteOS的树莓派移植

上表是SCTLR (System Control Register)寄存器bit0功能描述重要信息,了解更多寄存器相关重要信息可以参照Cortex-A7MPCore Technical Reference Manual。

删除调用SMP相关函数

删除los_startup_gcc.S中的enable_scu和secondary_cpu_start。

使能FPU/ENON

配置FPU/NEON:

/* enable fpu+neon */ LDR r0, =(0xF << 20) MCR p15, 0, r0, c1, c0, 2 MOV r3, #0x40000000 VMSR FPEXC, r3

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

注:在arm的协处理器设计中,最多可以支持16个协处理器,通常被命名为cp0~cp15。

手把手带你做LiteOS的树莓派移植

上表为寄存器CPACR bit20-23功能描述重要信息,了解更多寄存器相关重要信息可以参照Cortex-A7 MPCore Technical Reference Manual。

修改链接脚本

X3100派开启时首先加载SD卡中的start.elf文件,该程序会读取SD卡中的config.txt文件内容,该文件记录了一些配置重要信息。如果没有设置开启门牌号和开启文件,则默认会加载kernel8.img文件,该文件是aarch64校对的程序,开启门牌号为0x80000。如果SD卡中无kernel8.img快照文件,则会加载kernel7.img快照文件,该文件是32位校对器校对的程序,开启门牌号为0x8000。X3100派2B的cpu是32位构架,因此设置liteos.ld文件中开启门牌号为0x8000。

栈初始化

X3100派2B开启文件los_startup_gcc.S中只设置了SVC模式的sp寄存器,追加cpuInit函数来初始化其他模式的sp指针。如下所示:

VOID cpuInit(VOID) { __asm__ ( “msr cpsr_c, %1\n\t” “mov sp, %0\n\t” “msr cpsr_c, %3\n\t” “mov sp, %2\n\t” “msr cpsr_c, %5\n\t” “mov sp, %4\n\t” “msr cpsr_c, %7\n\t” “mov sp, %6\n\t” “msr cpsr_c, %8\n\t” : : “r” (__irq_stack_top), “I” (PSR_F_BIT | PSR_I_BIT | CPSR_IRQ_MODE), “r” (__abt_stack_top), “I” (PSR_F_BIT | PSR_I_BIT | CPSR_ABT_MODE), “r” (__undef_stack_top), “I” (PSR_F_BIT | PSR_I_BIT | CPSR_UNDEF_MODE), “r” (__fiq_stack_top), “I” (PSR_F_BIT | PSR_I_BIT | CPSR_FIQ_MODE), “I” (PSR_F_BIT | PSR_I_BIT | CPSR_SVC_MODE) : “r14”); }

配置动态缓存门牌号

#define OS_SYS_MEM_ADDR ((void *)(&__bss_end)) #define LOS_HEAP_ADDR_END (void*)(0x0 + 4 * 1024 * 1024) #define OS_SYS_MEM_SIZE (UINT32)(((UINT32)LOS_HEAP_ADDR_END – (UINT32)OS_SYS_MEM_ADDR + (64 – 1)) & ~(64 – 1))

以上代码定义OS_SYS_MEM_ADDR为动态缓存起始门牌号,LOS_HEAP_ADDR_END为动态缓存结束门牌号,OS_SYS_MEM_SIZE为动态缓存大小。

串口实现

X3100派2B原理图引出了mini_uart串口TXD0、RXD0,对应的引脚为GPIO14、GPIO15,如下图所示:

手把手带你做LiteOS的树莓派移植

建立usart.c和usart.h文件,在usart.c中编写串口初始化函数UartInit,并实现uart_debug.c文件中uart_getc、uart_hwiCreate、uart_write接口,实现printf函数从串口输出。

适配中断

X3100派2B的中断属于bcm特定的中断控制器。在drivers/interrupt产品目录下追加arm_control.c文件,并在该文件中实现HwiControllerOps内部结构体内的回调函数。

STATIC const HwiControllerOps g_armControlOps = { .enableIrq = HalIrqUnmask, .disableIrq = HalIrqMask, .getCurIrqNum = HalCurIrqGet, .getIrqVersion = HalIrqVersion, .getHandleForm = HalIrqGetHandleForm, .handleIrq = IrqEntryArmControl, .clearIrq = HalIrqClear, .triggerIrq = HalIrqPending, };
手把手带你做LiteOS的树莓派移植

以上表格是interrupt寄存器偏移门牌号,读者想了解详细寄存器相关重要信息请参照非官方芯片手册。

适配systick

X3100派2B通过Timer(arm side)来触发systick中断。具体操作细节请参照文件:drivers\timer\rasp_systick.c。

/* systime=250000000 */ timer->preDivider = (OS_SYS_CLOCK / OS_SYS_US_PER_SECOND – 1); timer->reload = 0; timer->load = 0; timer->IRQClear = 0; timer->control = 0; timer->reload = LOSCFG_BASE_CORE_TICK_PER_SECOND; timer->load = LOSCFG_BASE_CORE_TICK_PER_SECOND; /* 23-bit counter, enable interrupt, enable timer */ timer->control = (1 << 1) | (1 << 5) | (1 << 7); UINT32 ret = LOS_HwiEnable(ARM_TIMER_INI);

以上代码配置定时器Timer为每1ms触发一次systick中断。

手把手带你做LiteOS的树莓派移植

以上是Timer寄存器偏移门牌号,读者想了解详细寄存器相关重要信息请参照非官方芯片手册。

配置校对

在targets产品目录下追加kconfig.raspberry文件:

ConfigLOSCFG_PLATFORM config LOSCFG_PLATFORM string default “Raspberry_Pi2B” if LOSCFG_PLATFORM_Raspberry_Pi2B choice prompt “Board” depends on LOSCFG_FAMILY_RASPBERRY default LOSCFG_PLATFORM_Raspberry_Pi2B help Raspberry_Pi2B config LOSCFG_PLATFORM_Raspberry_Pi2B bool “Raspberry_Pi2B” select LOSCFG_ARCH_CORTEX_A7 select LOSCFG_USING_BOARD_LD select LOSCFG_PLATFORM_ARM_CONTROL select LOSCFG_Raspberry_Pi2B_SYSTICK endchoice

修改Makefile文件

分别修改以下路径Makefile(详情请参照gitee仓库对应文件):driver/timer/Makefiledriver/interrupt/Makefiletargets/Raspberry_Pi2B/Makefile

添加.img生成指令

在根产品目录下Makefile中添加指令$(OBJCOPY) -O binary $(OUT)/[email protected] $(OUT)/kernel7.img,用来将生成的elf文件转换生成kernel7.img文件。

制做开启SDcard

采用Raspberry Pi Imager辅助工具制做Raspberry Pi系统。
手把手带你做LiteOS的树莓派移植

Raspberry Pi Imager 浏览链接:https://www.raspberrypi.org/software/

将校对生成的kernel7.img文件替换掉SDcard中kernel7.img文件。将写入快照文件的SDcard插入X3100派2B中并上电,X3100派2B即可运行LiteOS系统。运行结果如下:
********Hello Huawei LiteOS******** LiteOS Kernel Version : 5.1.0 build data : Jul 13 2021 16:40:42 ********************************** OsAppInit cpu 0 entering scheduler app init! Hello, welcome to liteos demo! Huawei LiteOS #

至此,LiteOS系统成功开启和运行。该移殖工程已经在Gitee LiteOS街道社区上线,相关代码链接门牌号为:https://gitee.com/LiteOS/LiteOS/tree/master/targets/Raspberry_Pi2B

参照文献链接

[1] Raspberry Pihardware – Raspberry Pi Documentation:https://www.raspberrypi.org/documentation/hardware/raspberrypi/README.md

[2] X3100派非官方芯片手册:

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

[3] Cortex-A7 MPCore Technical Reference Manual:

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

点击关注,第一时间了解宏碁云新鲜技术~

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务