如何移植Linux到晶心平台
4.2.3. Kernel 解压缩与software breakpoint
在进行kernel 调试时,如果在低地址处,例如:head.S中进行调试,当设定 software breakpoint时,会有breakpoint无法停下来与AICE 断线的情况发生。原因是当使用者设定software breakpoint时,breakpoint处的instruction会修改并加入break instruction。但kernel解压缩时会将调试的程序代码覆盖造成与GDB调试不一致性而产生错误。解决的方法就是原设定software breakpoint改为hardware breakpoint,这样就可以避免因kernel解压缩所造成调试的错误,降低调试时的困难度。
4.2.4. PA/VA 观念说明与调试要领
在原始码arch/nds32/kernel/head.S中
la $lp, __mmap_switched
mtsr $lp, $IPC
iret
执行完iret后,系统就会从PA转成VA,MMU translation status从translation off转为translation on在此分界处调试规则如下所述,如果观念不清楚及容易产生调试时的错误,请务必牢记。
4.2.4.1. MMU translation off 时期调试
在这个时期调试,VA是不存在的。所有的IO address与memory都是PA没有VA,如果调试地址设成VA,容易hit illegal address 而造成exception。
4.2.4.2. MMU translation on 时期调试
在这个时期调试,PA是不存在的。所有的IO address与memory都是VA没有PA,如果调试地址设成PA,容易hit illegal address 而造成exception.
MMU translation on后,很快就会进入start_kernel 函数,接下来移植的重点就是移植Linux基础组件,那就是interrupt,timer and UART。当这3个device移植成功后,Linux的架构就建立起来了,printk也可以用了,Linux已经可以正常的运作。如果没有意外,可以执行完kernel甚至将filesystem带起来。接下来用户可以将自己的周边组件一个一个的device driver移植入系统。当周边组件移植完成后,Linux系统移植到晶心平台就完成了。
5. 结语
Linux操作系统运作在晶心平台已有多年的时间。各式各样的Linux软件运作在晶心平台不计其数。皆可证明Linux操作系统运作结合晶心平台是一个稳定与成熟的产品,只要能明了熟悉Linux 移植的技巧与重点,使用晶心平台开发Linux的产品将是一件愉快与简单的工作。
评论