![Rank: 8](images/default/star_level3.gif) ![Rank: 8](images/default/star_level3.gif)
- UID
- 872238
|
![](http://images.eccn.com/silabs/silicon_chip_980x60_202203.jpg)
内存页面大小:
Linux使用虚拟内存机制来管理内存,内存的使用基于页面。
不同的体系结构有不同的页面大小
常用的32位处理器使用4kB页面大小
部分体系结构可以支持多种页面大小
内核在<asm/page.h>里面定义PAGE_SIZE,PAGE_SHIFT
* PAGE_SIZE表示页面大小
* PAGE_SHIFT表示页面号在地址中的偏移量
* PAGE_SIZE=2^ PAGE_SHIFT
Linux操作系统移植:
工具链移植
* binutils (assembler, linker..)
* gcc (compiler, libgcc)
* glibc/uclibc
内核移植
* arch implementation
* drivers porting
应用程序移植
* C program recompile
* Implement absent library
Linux内核的平台相关代码:
Linux内核对多平台有很好的支持 内核的对外部接口是统一的,并且与平台无关
内核的大多数代码也是与平台无关的主要的体系结构相关代码存在于
* arch/architecture
* include/asm-architecture
比如arm体系的平台相关代码主要是
* arch/arm
* include/asm-arm
已有代码向Linux内核移植:
将已有代码向内核中移植有一些限制
* 内核中没有标准C库支持
* 内核中没有象用户程序那样的内存保护
* 内核中不便使用浮点操作
* 内核的堆栈是固定大小的,并且比较有限
* 在内核中需要编程者考虑并发带来的竞争与冒险,以及同步问题
Linux内核移植:
Linux内核代码可以分为平台相关部分和平台无关部分
Linux内核绝大部分代码是平台无关的,
可以被各种平台所共享
* 调度算法
* 存储器管理
* I/O子系统
* 网络协议栈
依赖于特定硬件的代码在Linux中采用条件编译的方式区分
* ARCH = x86 即打开x86特有的代码
* ARCH = arm 即打开arm特有的代码
Linux内核的arch目录:
进入arch目录,每个体系结构代码都有一个子目录
进入arm目录,在arm体系结构下我们可以看到很多sub-arch的子目录
实现sub-arch:
在sub-arch子目录下,以mach-s3c2410为例 一个硬件平台支持需要实现以下几个硬件相关的文件
* mach-s3c2410.c, irq.c, clock.c, dma.c, gpio.c, pm.c,sleep.c, time.c
* 同时在include/asm-arm/arch-s3c2410要实现
Low-level IRQ helper macros
Debug output macros
Irq number definations
DMA definations
Memory mapping/translation
Reset operation
IDLE function |
|