
#2020征文-开发板# 鸿蒙 移植 树莓派(下)修改源码 原创 精华
项目最新更新,可以查看码仓 https://gitee.com/liangzili/harmony-raspberry
1、切换启动模式
树莓派默认启动在HYP模式,我们需要在内核启动前改为SVC模式
kernel\liteos_a\arch\arm\arm\src\startup\reset_vector_up.S 在115行左右,reset_vector:下面添加
2、修改串口驱动
2.1、为了方便调试,先设置一个字符打印函数
kernel\liteos_a\platform\uart\amba_pl011\amba_pl011.c在46行左右处添加下面的代码,uart_putc_phy使用物理地址打印字符,uart_putc_virt使用虚拟地址打印。当内核代码启动MMU之后,需用使用uart_putc_virt来打印字符。
例如:kernel\liteos_a\arch\arm\arm\src\startup\reset_vector_up.S
2.2、添加串口中断,串口输入代码
2.2.1、 串口的中断函数,产生中断时,这个函数调用
2.2.2、串口的初始化函数
2.2.3、串口写函数
2、系统时钟初始化
2.1、main函数的各种调用,验证参数
kernel\liteos_a\platform\main.c->main()
kernel\liteos_a\kernel\common\los_config.c->OsMain()
kernel\liteos_a\arch\arm\arm\src\los_hw_tick.c->OsTickInit()
2.2、先获取当前时钟频率,注册中断
kernel\liteos_a\platform\hw\arm\timer\arm_generic\arm_generic_timer.c
2.3、时钟中断的执行函数OsTickEntry()
kernel\liteos_a\platform\hw\arm\timer\arm_generic\arm_generic_timer.c
2.3、启动时钟
main() => OsStart(VOID) => OsTickStart() => HalClockStart(VOID)
kernel\liteos_a\platform\hw\arm\timer\arm_generic\arm_generic_timer.c => HalClockStart(VOID)
2.3.1、HalIrqUnmask; //接收中断(通过设置寄存器,允许CPU响应该中断)
2.3.2、TimerCtlWrite(0); //关闭Timer
参考:ARM ArchitectureReference Manual ARMv7-A and ARMv7-R edition.pdf
《B3.17 Organization of the CP15 registers in a VMSA implementation》
2.3.3、TimerTvalWrite(OS_CYCLE_PER_TICK); //设置Tval
2.3.4、TimerCtlWrite(1); //再开启Timer
2.4、代码移植
Z:\bright\harmony-100ask\kernel\liteos_a\platform\hw\arm\interrupt\gic\gic_v2.c
Z:\bright\harmony-100ask\kernel\liteos_a\platform\hw\arm\timer\arm_generic\arm_generic_timer.c
...
=======完整内容======
