不浮躁
分类: LINUX
2014-12-21 00:21:39
原文地址:linux内核和根文件系统移植步骤和错误分析(一) 作者:genehang
经过了四天的日夜奋战,终于让我修炼出了根文件系统,我乐乐乐啊…
下面是内核移植的一些具体步骤,文件系统的移植我下章续上
一,内核移植
我这里用的是linux-3.1.4的内核
1, 解压源码包
tar xvf linux-3.1.4.tar.bz2
2, 修改顶层目录Makefile文件,修改平台和交叉编译工具
3, 建立Nand flash分区信息表:
在/home/linux-2.6.35/arch/arm/plat-s3c24xx中有common-smdk.c文件
root@ubuntu:/home/linux-2.6.35# vim arch/arm/plat-s3c24xx/ common-smdk.c
static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name = "uBoot",
.size = 0x40000,
.offset = 0,
},
[1] = {
.name = "kernel",
.offset = 0x40000,
.size = 0x400000,
},
[2] = {
.name = "fs",
.offset = 0x440000,
.size = 0x800000,
},
[3] = {
.name = "extern fs",
.offset = 0xc40000,
.size = 0x33c0000,
},
}
name: 代表分区名字
size: 代表flash分区大小(单位:字节)
offset: 代表flash分区的起始地址(相对于0x0的偏移)
编译好,移植到开发板后可以看见这样的打印信息:
4, 选板子,在arch/arm/configs目录下包含了ARM体系结构开发板的参考配置文件,先在该目录下,找到一个类似的参考文件,可以用下面的办法快速的发现我们需要的板子:
ls *2410* ----> 发现s3c2410_defconfig
拷贝默认配置文件到顶层目录下
cp ..arch/arm/configs/s3c2410_defconfig ./
make s3c2410_defconfig
生成.config文件
内核配置的目的:
内核在编译前,寻找.config文件,作为他编译的准则。编译:Makefile
.config文件是给Makefile来读
5, 添加网卡驱动
a) 将cs8900.c和cs8900.h两个文件拷贝到drivers/net/arm/目录下
注意:在linux-3.1.4内核中cs8900.c文件里面应该有控制中断位的头文件
#include
在cs8900_start函数中修改set_irq_type()为irq_set_irq_type()
b) 修改drivers/net/arm/Konfig 添加cs8900内核配置项
config S3C2410_CS8900
tristate ”CS8900 support”
depends on ARM
--help—
Support for cs8900 chipset base Ethernet cards
c) 修改makefile :
driver/net/arm/makefile
:obj-$(CONFIG_ARM_CS8900) +=cs8900.o
d) 添加地址映射定义:
修改arch/arm/mach-s3c24xx/include/plat/map.h
e) 添加平台代码
在arch/arm/mach-s3c2410/mach-smdk2410.c文件中添加:
f) 查看虚拟地址到物理地址的转换:
arch/arm/plat-samsang/include/plat/cpu.h
#define IODESC_ENT(x) { (unsigned long)S3C24XX_VA_##x,
__phys_to_pfn(S3C24XX_PA_##x), S3C24XX_SZ_##x, MT_DEVICE }
6, 在顶层目录下执行make menuconfig 进行选项配置:
a) General setup选项:
b) Enable loadable module support选项:
c) Enable the block layer选项:
[*] Support for large (2TB+) block devices and files
d) System Type选项:
s3c2410 Machines--à
注:system type选板子,这里用的是2410开发板,因此除2410外都不选
e) Kernel Features
[*] Use the ARM EABI to compile the kernel
[*] Provide old way to pass kernel parameters
f) Userspace binary formats
f) Device Drivers
[*] Network device support --->
[*] Ethernet (10 or 100Mbit) --->
g) File systems
Pseudo filesystems --->
7, 编译内核:
make zImage