HarmonyOS移植树莓派,鸿蒙移植树莓派(下)修改源码

188cf8d2463da911f774e6c8ad1930f7.png

项目最新更新,可以查看码仓 https://gitee.com/liangzili/harmony-raspberry

1、切换启动模式

树莓派默认启动在HYP模式,我们需要在内核启动前改为SVC模式

kernel\liteos_a\arch\arm\arm\src\startup\reset_vector_up.S 在115行左右,reset_vector:下面添加

mrs r0,cpsr         //读取CPU模式寄存器

bic r0,r0,#0x1F     //清除CPU模式位(如果处于催眠模式,它将是1A)保留所有其他

orr r0,r0,#0x13     //设置CPU_MODE为SVC_MODE (0x13),而ORR仍然保留所有其他位

msr spsr_cxsf,r0    //将其写入spsr_cxsf寄存器,以便在调用交换机时加载该寄存器。

addr0,pc,#4        //从pc计算要进入SVC_MODE的地址(后面的两个操作码很长)

msr ELR_hyp,r0      //将地址值写入ELR_hyp寄存器

eret                //执行了回车指令

2、修改串口驱动

2.1、为了方便调试,先设置一个字符打印函数

kernel\liteos_a\platform\uart\amba_pl011\amba_pl011.c在46行左右处添加下面的代码,uart_putc_phy使用物理地址打印字符,uart_putc_virt使用虚拟地址打印。当内核代码启动MMU之后,需用使用uart_putc_virt来打印字符。

/*---------自定义函数----------*/

#define RPI_BASE_UART_REGISTER (0x3f201000) //HI3516:0x120A0000 rpi2:0x3F201000

#define AMBA_UART_DR (*(volatile unsigned char*)(RPI_BASE_UART_REGISTER + 0x00))

#define AMBA_UART_FR (*(volatile unsigned char*)(RPI_BASE_UART_REGISTER + 0x18))

#define RPI_BASE_UART_REGISTER1 IO_DEVICE_ADDR(0x3F201000) //HI3516:0x120A0000 rpi2:0x3F201000

#define AMBA_UART_DR1 (*(volatile unsigned char*)(RPI_BASE_UART_REGISTER1 + 0x00))

#define AMBA_UART_FR1 (*(volatile unsigned char*)(RPI_BASE_UART_REGISTER1 + 0x18))

/*---------------------------*/

void uart_putc_phy(unsigned charc)

{

//UART_Type *uartRegs = (UART_Type *)UART4_REG_PBASE;

//while ((uartRegs->USART_ISR & (1<<5)) == 0);

//uartRegs->USART_TDR = c;

while (AMBA_UART_FR & (1 <

AMBA_UART_DR = c;

}

void uart_putc_virt(unsigned charc)

{

//UART_Type *uartRegs = (UART_Type *)UART_REG_BASE;

//while ((uartRegs->USART_ISR & (1<<5)) == 0);

//uartRegs->USART_TDR = c;

while (AMBA_UART_FR1 & (1 <

AMBA_UART_DR1 = c;

}

例如:kernel\liteos_a\arch\arm\arm\src\startup\reset_vector_up.S

ldr sp, =0x0

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值