**********************************************************************************************************
#操作系统 :CentOS6.7
#内核下载地址:https://www.kernel.org/pub/linux/kernel/
#参考板子 :smdk2440 mini2440
#cpu :s3c2440,(arm920t)
#编译环境 :gcc version 4.4.7 (buildroot-2012.08)
#u-boot :u-boot-2010.09(MACHID = 1999)
#Linux内核 :linux-3.0
*********************************************************************************************************
在移植内核之前我们有必要了解一下内核的基础知识!
1.什么是内核?
“内核”指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。一个内核不是一套完整的操作系统。一套基于Linux内核的完整操作系统叫作Linux操作系统,或是GNU/Linux。设备驱动程序可以完全访问硬件。Linux内的设备驱动程序可以方便地以模块化(modularize)的形式设置,并在系统运行期间可直接装载或卸载。
Linux内核的主要模块(或组件)分以下几个部分:存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信,以及系统的初始化(引导)、系统调用等。
2.
Makefile:一个文本形式的文件,其中包含一些规则告诉make编译哪些文件以及怎样编译这些文件。
Kconfig:一个文本形式的文件,其中主要作用是在内核配置时候,作为配置选项。(make menuconfig里面的配置就在Kconfig里面)
.config:文件是在进行内核配置的时候,经过配置后生成的内核编译参考文件。(make menuconfig后就会生成这些.config文件<这些是隐藏文件,如果想查找可以用 find ".config" 命令>)
make menuconfig: 图形化的内核配置
一.配置顶层的Makefile
这里修改的原因是:指明体系结构为arm,采用的交叉编译器为arm-linux-,这一步一定要改完再执行make menuconfig,否则,用的是x86的make,打开的配置单不是arm的。
1.下面是自己要添加的代码:
**********************************************************************************************************************************************************************************
559 all: vmlinux(目标)
560 cp arch/arm/boot/zImage . -f(拷贝zImage文件到当前目录)
561 /home/zoulei/fl2440/kernel/linux-3.0/mkimage -A arm -O linux -T ker nel -C none -a 30008000 -e 30008040 -n "Linux Kernel" -d zImage linuxrom-s3 c2440.bin(将zImage制作成启动映像文件,即:linuxrom-s3c2440.bin)
562 rm -f zImage
**********************************************************************************************************************************************************************************
说明:
zImage
Linux 内核有两种映像:一种是非压缩内核,叫 Image,另一种是它的压缩版本,叫zImage。根据内核映像的不同,Linux内核的启动在开始阶段也有所不同。zImage是Image经过压缩 形成的,所以它的大小比 Image小。但为了能使用zImage,必须在它的开头加上解压缩的代码,将 zImage解压缩之后才能执行,因此它的执行速度比Image要慢。但考虑到嵌入式系统的存储空容量一般比较小,采用zImage可以占用较少的存储空 间,因此牺牲一点性能上的代价也是值得的,所以一般的嵌入式系统均采用压缩内核的方式。
编译完成后,会在内核目录arch/arm/boot/下生成zImage内核映像文件。
mkimage
uboot源代码的tools/目录下有mkimage工具,这个工具可以用来制作不压缩或者压缩的多种可启动映象文件。
mkimage在制作映象文件的时候,是在原来的可执行映象文件的前面加上一个0x40字节的头,记录参数所指定的信息,这样uboot才能识别这个映象是针对哪个CPU体系结构的,哪个OS的,哪种类型,加载内存中的哪个位置, 入口点在内存的那个位置以及映象名是什么(这里我mkimage我就直接放到内核的根目录下面所以路径就是如上图所示,如果你mkimage没放到内核的根目录下,那么就要在使用的时候加上路径)
2.在distclean下加入一条命令:
1207 @rm -f linuxrom-s3c2440.bin (加上@后屏幕不会打印出来这条语句)
二.修改晶振频率
[zoulei@CentOS linux-3.0]$ vim arch/arm/mach-s3c2440/mach-smdk2440.c
时钟晶振 s3c24xx_init_clocks( )改成12MHz=12000000,这里设置成12M是参考s3c2440的datasheet
三.对串口进行修改
[zoulei@CentOS linux-3.0]$ vim drivers/tty/serial/samsung.c