(写了快一年了,一直发布在linux.cn上,今天把它贴过来,希望对大家有所帮助,当时写的时候有所参考)
使用语言:ARM汇编,C语言。
使用工具:gcc,codeblocks,makefile
1硬件方面
1.1阶段一
- 实现目标:熟悉ARM的体系结构,C/汇编编程,接口技术,裸跑。
- 实现方法:精读《嵌入式系统开发与应用教程》,《飞凌TE2440开发板试验手册》,《基于ARM嵌入式系统接口技术》,《ARM9嵌入式系统开发与实践》。《嵌入式系统开发与应用教程》与《基于ARM嵌入式系统接口技术》可以通过上课学习,课后认真研究完成,主要培养基于ARM的C,汇编程序设计能力和接口电路。《ARM9嵌入式系统开发与实践》可以让自己了解开发板的最小系统,外设接口和Bootloader的引导以及Linux内核的移植技术。《飞凌TE2440开发板试验手册》主要讲解datasheet与裸跑,可以从网上下载TE2440的中文datasheet。
- 实现目标:熟悉ARM Bootloader(vivi,u-boot)。
- 实现方法:学习8086汇编,看尚德视频Linux系统的启动引导,《ARM9嵌入式系统开发与实践》的第6章,S3C2410开发平台Bootloader详解。以及自己一些讲解ARM Bootloader的PDF,吸取8086引导的优点(包括实模式和保护模式),结合ARM的引导过程,写自己的引导程序。
1.2阶段二
-
实现目标:熟悉ARM Bootloader(vivi,u-boot)。
-
实现方法:学习8086汇编,看尚德视频Linux系统的启动引导,《ARM9嵌入式系统开发与实践》的第6章,S3C2410开发平台Bootloader详解。以及自己一些讲解ARM Bootloader的PDF,吸取8086引导的优点(包括实模式和保护模式),结合ARM的引导过程,写自己的引导程序。
2软件方面:
2.1阶段一
- 实现目标:总体把握Linux内核的设计原理。
- 实现方法:精读《Linux内核设计与实现》,在网上看帖子。
2.2阶段二
- 实现目标:深入理解Linux内核
- 实现方法:精读《深入理解Linux内核》第三版,并参考《Linux内核源代码情节分析(上册)》,这是一个漫长的过程,多动手修改内核代码,比如加一条系统调用等。要熟悉的子系统有内存管理,中断处理与系统调用进程调度,进程通信以及文件系统,要对这5个子系统深入研究。
2.3阶段三
- 实现目标:设计自己的内核。
- 实现方法:了解windows的内核实现机制,并通过前两个阶段对Linux内核设计和源码的学习,设计自己的内核。
2.4阶段四
- 实现目标:在自己的开发板,TE2440上写一个属于自己的内核。
- 进度:
a) 完成ARM汇编学习,8086启动,保护模式和实模式,《Linux内核设计与实现》熟读,《嵌入式系统开发与应用教程》与《基于ARM嵌入式系统接口技术》熟练掌握,接口技术中讲过的程序,要自己能够运行,学习Bootloader的编写。
b) Bootloader:
- 熟悉Bootloader的两种操作模式。
- 熟悉Bootloader启动的两个阶段。
- 熟悉vivi,u-boot并移植到开发板上。
- 写自己的Bootloader。
c) 开始文件系统子系统的学习,开始《ARM9嵌入式系统开发与实践》的学习,编写Bootloader于开发板。
参考:
- lkd 第12章
- ulk 第12章
- 情景 第5章
d) 开始写文件系统子系统。
e) 开始学习内存管理子系统。
内存管理:
- 页。
- 区。
- 内存映射。
- 获得页。
- kmalloc(),vmalloc()。
参考:
- lkd 第11章,14章,15章
- ulk 第2章,8章,9章,15章
- 情景 第2章
f) 完成存储管理的编写于开发板。
g) 开始进程调度子系统的学习。
进程调度:
- 进程描述符即任务结构。
- 进程状态。
- fork(),vfork(),clone()。
- RR算法。
- 抢占和上下文切换(保存现场之类的)。
- 算法时间复杂度O(1)的优先级数组。
- 优先级范围 nice值 -20~+19
参考:
- lkd 第3章,4章
- ulk 第7章
- 情景 第4章
h) 完成进程调度子系统的编程。
i) 开始中断与系统调用子系统的学习。
中断与系统调用:
- top half:
- 注册中断处理程序 request_irq()
- 释放中断处理程序 free_irq()
- 中断处理程序 intr_handler()
- 中断处理机制的实现 do_irq()
- 禁止和激活中断
- 共享中断线
- bottom half:
- 分配索引
- 注册处理程序
- 触发中断
- 系统调用:
- 系统调用号。
- 系统调用处理程序。
- 从用户空间访问系统调用。
参考
- lkd 第5章,6章
- ulk 第4章,10章
j) 完成中断处理与系统调用子程序的编写。
k) 开始进程通信子系统的学习。
进程通信:
- 管道pipe
- 创建和撤销管道
- 从管道中读取数据
- 向管道中写入数据
- FIFO
- 创建并打开FIFO
参考:
- ulk 第19章
- 情景 第6章
l) 完成进程通信代码编写。
m) 整理项目。