tiny6410: linux内核移植以及文件系统

经过两个星期的坎坎坷坷,终于算是内核启动成功了。

这里主要是参考了网上一篇 6410内核移植的文章,和国嵌的视频。

目标板:tiny6410

宿主机:win7+CentOS

编译器:arm-linux-gcc-4.5.1 


之前花了好多时间去移植bootloader,但是没有成功,内心十分着急。所以跳过了这块,直接去移植内核了。。。。

所以,bootloader用的是友善之臂的。

首先,移植内核

1 下载linux-2.6.38的源码
ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.38.tar.bz2
2 解压

tar zxvf  linux-2.6.38.tar.bz2

3 修改根下的Makefile
#vi Makefile
191行改为
ARCH ?=arm
CROSS_COMPILE?=arm-linux- (找到其交叉编译环境)
4 生成默认配置文件
#cparch/arm/configs/s3c6400_defconfig .config
(如果省略的话,后面会找不到SystemType)
5 修改配置项(基本配置)
#makemenuconfig
General setup->(/usr/4.5.1/bin/arm-linux-) Cross-compiler tool
prefix 我将编译器解压到了/opt/Friendly/toolschain/4.5.1/bin目录(如
果第三步中以修改“CROSS.complier?=arm-linux-”此项,这步可
以不作)
SystemType->[*]MINI6410 选上,其他的可以去掉,不确定的可
以参考友善之臂的(这样编译出来的内核是可以被uboot引导的,然后
是增加nandflash支持)
viarch/arm/mach-s3c64xx/mach-mini6410.c
第117行
structmtd_partitionmini6410_nand_part[]={
{
.name ="Bootloader",
.offset =0,
.size =(4*128*SZ_1K),
.mask_flags =MTD_CAP_NANDFLASH,
},
{
.name ="Kernel",
.offset =(4*128*SZ_1K),
.size =(5*SZ_1M),
.mask_flags =MTD_CAP_NANDFLASH,
},
{
.name ="FileSystem",
.offset =MTDPART_OFS_APPEND,
.size =MTDPART_SIZ_FULL,
}
}; //update at2011-8-26经过测试发现,这里改完后根本不起作
用,甚至将整个注释也无妨,估计分区已经固死在后面的
s3c_nand_mlc.fo中
6 拷贝NANDFLASH驱动
(将6410内核中的如下文件拷到相应的目录下)
需拷贝文件:
drivers/mtd/nand/s3c_nand.c
arch/arm/plat-samsung/include/plat/regs-nand.h 覆盖掉
drivers/mtd/nand/s3c_nand_mlc.fo
《s3c_nand_mlc.fo友善没有开源的一个驱动之一,所以不用研究
了,拷过来就是了。》
drivers/mtd/nand/nand_base.c覆盖掉
当然如果想手动修改的话见附件1
drivers/mtd/nand/Kconfig 覆盖掉
详细请见附件2
7drivers/mtd/nand/Makefile中20行增加
obj-$(CONFIG_MTD_NAND_S3C) +=s3c_nand.o
末尾再增加
S3C_NAND_MLC_SRC=$(shellls
drivers/mtd/nand/s3c_nand_mlc.c2>/dev/null)
ifeq ($(S3C_NAND_MLC_SRC),)
obj-$(CONFIG_MTD_NAND_S3C) +=s3c_nand_mlc.fo
else
obj-$(CONFIG_MTD_NAND_S3C) +=s3c_nand_mlc.o
endif
这步要是不愿意改的话,直接拷贝覆盖即可覆盖掉
8然后再make menuconfig
DeviceDrivers--->
<*>MemoryTechnologyDevice(MTD)support--->
[*] MTDpartitioningsupport
[*] Commandlinepartitiontableparsing
<*> DirectchardeviceaccesstoMTDdevices
<*> CachingblockdeviceaccesstoMTDdevices
<*> NANDDeviceSupport--->
<> NANDFlashsupportfor Samsung
S3CSoCs去掉不要选
<*> NANDFlashsupportforS3CSoC
[*] S3CNANDHardwareECC
9编译
Make
如果顺利通过则出现如下信息:
OBJCOPYarch/arm/boot/Image
Kernel:arch/arm/boot/Imageisready
AS arch/arm/boot/compressed/head.o
GZIP arch/arm/boot/compressed/piggy.gzip
AS arch/arm/boot/compressed/piggy.gzip.o
CC arch/arm/boot/compressed/misc.o
CC arch/arm/boot/compressed/decompress.o
SHIPPEDarch/arm/boot/compressed/lib1funcs.S
AS arch/arm/boot/compressed/lib1funcs.o
LD arch/arm/boot/compressed/vmlinux
OBJCOPYarch/arm/boot/zImage
Kernel:arch/arm/boot/zImageisready
Buildingmodules,stage2.
MODPOST16modules
10下载到开发板
Make后生成的内核文件(zimage)在/arch/arm/boot/ 下。将其共
享或者通过其他方式放到window下并将开发板与pc连接利用dns工
具下载至开发板,按b重起开发板,测试内核是否正确编译、移植。
此时可能出现如下问题:
usbcore:registerednewinterface driverusbhid
usbhid:USBHIDcoredriver
VFPsupportv0.3:implementor41architecture1part20variantbrev
5
drivers/rtc/hctosys.c:unabletoopenrtcdevice(rtc0)
VFS:Cannotopenrootdevice"ubi0:FriendlyARM-root"or
unknown-block(0,0)
Pleaseappendacorrect"root="bootoption;herearetheavailable
partitions:
1f00 4096mtdblock0 (driver?)
1f01 8192mtdblock1 (driver?)
1f02 2084864mtdblock2 (driver?)
Kernelpanic-notsyncing:VFS:Unabletomountrootfson
unknown-block(0,0)
[](unwind_backtrace+0x0/0xe4)from[]
(panic+0x50/0x16c)
[](panic+0x50/0x16c)from[]
(mount_block_root+0x238/0x288)
[](mount_block_root+0x238/0x288)from[]
(prepare_namespace+0x88/0x1b4)
[](prepare_namespace+0x88/0x1b4)from[]
(kernel_init+0x108/0x148)
[](kernel_init+0x108/0x148)from[]
(kernel_thread_exit+0x0/0x8)
OK //在此卡住不动



这部分完全按网上的做,然后是文件系统。

我是按照国嵌的视频,制作基于RAM的文件系统 initramfs


先制作根文件系统

创建设备文件

安装/etc

编译内核模块

安装内核模块

配置busybox

编译、安装busybox

配置linux内核,支持initramfs文件系统

加入rootfs路径 

vim .config

CONFIG_INITRAMFS_SOURSE="/root/rootfs"

执行ln–s ./bin/busyboxinit     创建软连接

编译内核

oktiny6410: linux内核移植以及文件系统_第1张图片



你可能感兴趣的:(linux,嵌入式)