Chinaunix首页 | 论坛 | 博客
  • 博客访问: 545409
  • 博文数量: 101
  • 博客积分: 1889
  • 博客等级: 上尉
  • 技术积分: 906
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-14 16:22
文章分类

全部博文(101)

文章存档

2012年(11)

2011年(19)

2010年(59)

2009年(12)

我的朋友

分类: 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

修改第193194指定目标平台为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中在distcleanmrproper约第1156),-type f –print | xargs rm –f后面添加rm zImage

2 修改arch/arm/mach-smdk2440.c(在这里发现了好几个mack_xxxx.c文件而且大体结构都相似推测这个文件是板级配置文件我用mach-smdk2440.c基于标准的SMDK2440修改)

修改第162行,指定系统晶振频率

s3c24xx_init_clocks(16934400);

改为s3c24xx_init_clocks(12000000);

【有时候会出现引导到……….start kernel说明有可能是机器码不匹配造成的arch/arm/tools/machj-types中存放着机器码S3C2440Linux中对应的机器码宏为ARCH_S3C2240379机器码为362UBOOT中每个目标板也有个机器码在/board//gd->bd->bi_arch_number = MACH_TYPE_S3C2440; 处定义这个MACH_TYPE_S3C2440即为机器码的宏这宏定义在\include\asm-arm\mach-types.h这个机器码和内核的机器码这两个数字要相同UBOOT才能正常引导Linux启动。

3 #make将生成vmlinux镜像#make zImage将生成zImage压缩镜像mkimage处理zImage生成uImage然后下载到内后应该可以用bootm命令引导起来【据说2.6.27以后的内核可以直接用#make uImage来生成uImage镜像】。这里仅仅是可以引导内核了,但是不能输入命令或是做其他什么工作。——STAGE1

为了让系统正真跑起来还必须移植文件系统,相关硬件设备的驱动等。

阅读(2745) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~