分类: LINUX
2010-05-25 16:23:37
Linux移植
A. Linux内核源码目录结构:
a) arch 包含特定CPU体系结构的代码
b) drivers 包含硬件驱动代码
c) include 通用头文件及针对不同平台的特定头文件
d) init 内核初始化代码
e) ipc 进程间通信代码
f) kernel 内核核心代码
g) mm 内存管理代码
h) net 网络协议相关代码
i) fs 文件系统相关代码
j) lib 库文件,与平台无关
k) document 文档
B. 重要的数据结构:
a) task_struct task_struct数据结构代表一个进程,用task_struct指针形成一个task数组,当建立新进程时,linux为新进程分配一个task_struct结构,然后将指针保存在task数组中,调度程序维护指向当前正在运行进程的current指针。
b) mmu_struct 每个进程的虚拟内存由mmu_struct结构代表,该结构中包含一组指向vm-area_struct结构的指针,vm-area_struct结构描述了虚拟内存的一个区域。
c) inode 代表Linux虚拟文件系统中文件、目录等的索引节点。
参考《ARM的嵌入式Linux移植体验之操作系统-开发频道-ARM-天极网.htm》
移植步骤:参考《Linux移植之SETP BY SETP_20090302_天嵌科技》
1、 修改顶层Makefile
修改第193,194行,指定目标平台为ARM,并指定交叉编译器:
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=
改为:
ARCH ?= arm
CROSS_COMPILE ?=/opt/eldk/usr/bin/arm-linux-
我用的是ELDK的编译器。如果在环境变量中设置了交叉编译器的路径,则这里可以不带路径。也可以通过make ARCH="arm" CROSS_COMPILE=arm-linux-来设置。
【修改镜像文件存放位置:修改arch/arm/boot/Makefile在@echo ‘Kernel:$@is ready’ (约第60行)的上面添加拷贝zImage的代码:@cp –f arch/arm/boot/zImage zImage这就将生产的zImage拷贝到根目录下了,同时修改make distclean目标,在顶层Makefile中在distclean:mrproper段(约第1156行),在-type f –print | xargs rm –f后面添加:rm zImage】
2、 修改arch/arm/mach-smdk2440.c(在这里发现了好几个mack_xxxx.c文件,而且大体结构都相似,推测这个文件是板级配置文件,我用mach-smdk2440.c基于标准的SMDK2440修改)
修改第162行,指定系统晶振频率
s
改为s
【有时候会出现引导到……….start kernel处,说明有可能是机器码不匹配造成的,在arch/arm/tools/machj-types中存放着机器码,S3C2440在Linux中对应的机器码宏为ARCH_S3C2240在379行,机器码为362;UBOOT中每个目标板也有个机器码在/board/
3、 #make将生成vmlinux镜像,#make zImage将生成zImage压缩镜像,用mkimage处理zImage生成uImage然后下载到内后应该可以用bootm命令引导起来【据说
为了让系统正真跑起来还必须移植文件系统,相关硬件设备的驱动等。