作者: falcon 发表日期: 2009-03-31 16:14
复制链接
by falcon <wuzhangjin@gmail.com>
2009-03-31
[差点就要长篇大论(用E文写了大概要两个section了),想了想,还是直接从weekreport里头copy过来,整理一下得了!]
最近移植了Linux的实时扩展补丁RT_PREEMPT到loongson2f平台上,现在基本完工,这里做个小结。
一、移植过程
移植的过程大概如下(序号大体是推进的,但是有些可能是交叉并行的):
0、查找Loongson2f相关的资料,资料收集如下:
http://oss.lzu.edu.cn/blog/blog.php?do_showone/tid_1986.html
更多资料:http://dev.lemote.com/drupal/download
Google + Baidu ==> 整个互联网
1、学习mips汇编,学习笔记如下:
Practical MIPS Assembly Language Programming In Linux
http://oss.lzu.edu.cn/blog/blog.php?do_showone/tid_1991.html
汇编的学习没有任何诀窍,看cpu指令手册,看汇编规范,使用汇编工具,做练习!
2、了解mips/loongson2f平台
阅读see mips run v2和loongson2f用户手册,使用福珑6003的盒子
光看是没有用,对照内核源代码来阅读会比较好一些!
3、了解Linux内核中跟RT_PREEMPT相关的部分
阅读lkd,ldd3等linux内核相关的书籍,仔细阅读了内核线程、中断处理、时钟管理、进程同步等部分。
边看边练!
4、使用RT_PREEMPT,阅读其源代码
http://rt.wiki.kernel.org
在移植之前,把要移植的东西了解透彻,但是不要在某些点钻得太深,点到为止(找到跟架构和目标相关的地方为止)!否则整个进程将不好控制!
5、移植RT_PREEMPT到qemu/mips(malta)上
主要是解决语法错误之类,这个时候需要cscope, objdump, nm之类的工具辅助
指定cscope的架构: $ make cscope ARCH=mips
6、移植RT_PREEMPT到福珑6003(loongson2f based)上
在PMON这个BIOS和Bootloader级别的debugger的帮助下找出了一个bug,可以在loongson2f上跑起RT_PREEMPT了。
关于添加配置选项和内核编译选项什么的,请仔细阅读:Documentation/kbuild/*
如果运行不起来,不要恐惧!因为导致运行不起来的原因仅仅是一个非常小的bug,仔细分析,用各种调试器辅助解决之!详细的调试技巧看后面一节!
7、移植RT_PREEMPT的实时内核调试工具Ftrace和perf_counter
这个时候主要用的调试工具就是万能的printk了~~当然,还要对mips的sub-routine之类的实现有相当的清晰!特别是寄存器的保护!
了解这些工具的原理,熟悉相关的硬件,然后移植之!
8、整理源代码和文档
整理源代码,最好是以补丁的形