linux移植心得GGY文档格式.docx
《linux移植心得GGY文档格式.docx》由会员分享,可在线阅读,更多相关《linux移植心得GGY文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
3)修改arch/s3c2410/smdk2410.c
修改NANDflash的分区如下:
-----------------------------------------------------------------------------------
#ifdefCONFIG_S3C2410_NAND_BOOT
mtd_partition_tdefault_mtd_partitions[]={
{
name:
"
vivi"
offset:
0,
size:
0x00030000,/*192k*/
flag:
0
},{
param"
0x00030000,
0x00010000,/*64k*/
kernel"
0x00040000,
0x003C0000,/*3.75M*/
rootcramfs"
0x00400000,
0x00A00000,/*10M*/
},{
rootyaffs"
0x00E00000,
0x01E00000,/*30M*/
user"
0x02C00000,
0x01400000,/*20M*/
MF_BONFS
}
};
#endif
修改cmd_line:
charlinux_cmd[]="
noinitrdroot=/dev/mtdblock3init=/linuxrcconsole=ttySAC0,
115200mem=64M"
;
注:
此默认启动引导参数也可在vivi启动时,进入vivi控制台输入,例如:
vivi>
paramsetlinux_cmd_line"
noinitrdroot=/dev/mtdblock3init=/linuxrcconsole=ttySAC0,115200mem=64M"
paramsave
输入命令字符串的时候,root=/dev/mtdblock3,而不是root=/dev/mtdblock/3,多个”/”文件系统就引导不起来。
4)编译
#makeoldconfig
#makemenuconfig
vivi默认的配置即可满足基本的需要。
=================================================
内核移植
==================================================
1)下载Linux2.6.21.1内核源码
2)修改内核源码根目录下的Makefile文件
#viMakefile
......
#SUBARCH:
=$(shelluname-m|sed-es/i.86/i386/-es/sun4u/sparc64/\
#
-es/arm.*/arm/-es/sa110/arm/\
-es/s390x/s390/-es/parisc64/parisc/\
-es/ppc.*/powerpc/-es/mips.*/mips/)
#ARCH
?
=$(SUBARCH)
#CROSS_COMPILE
=
ARCH
=arm
CROSS_COMPILE
=/usr/local/arm/3.4.1/bin/arm-linux-
CROSS_COMPILE的值因个人情况而定。
3)修改arch/arm/plat-s3c24xx/common-smdk.c文件,修改NandFlash的分区信息和NandFlash的硬件信息。
-------------------------------------------------------------------------------------------
…….
/*NANDparititonfrom2.4.18-swl5*/
staticstructmtd_partitionsmdk_default_nand_part[]={
[0]={
.name="
Vivi-0.1.4"
.offset=0,
.size=0x00030000,
},/*192K*/
[1]={
Vivi-0.1.4Parameter"
.offset=0x00030000,
.size=0x00010000,
},/*64K*/
[2]={
Linux2.6.21.1Kernel"
.offset=0x00040000,
.size=0x003C0000,
},/*3.75M*/
[3]={
Boot-Rootcramfs"
.offset=0x00400000,
.size=0x00A00000,
},/*10M*/
[4]={
Rootyaffs"
.offset=0x00E00000,
.size=0x01E00000,
},/*30M*/
[5]={
.offset=0x02C00000,
.size=0x01400000,
},/*20M*/
/*
[6]={
S3C2410flashpartition6"
.offset=SZ_1M*24,
.size=SZ_1M*24,
},
[7]={
S3C2410flashpartition7"
.offset=SZ_1M*48,
.size=SZ_16M,
*/
………
staticstructs3c2410_platform_nandsmdk_nand_info={
.tacls=0,
.twrph0=30,
.twrph1=0,
.nr_sets=ARRAY_SIZE(smdk_nand_sets),
.sets=smdk_nand_sets,
4)修改drivers/mtd/nand/s3c2410.c,去掉nandflash的ECC
搜索关键字NAND_ECC_SOFT,在s3c2410_nand_init_chip()函数里,修改NAND_ECC_SOFT为NAND_ECC_NONE。
5)增加Yaffs文件系统的支持
a.下载Yaffs2
URL:
http:
//www.aleph1.co.uk/cgi-bin/viewcvs.cgi/
b.解压Yaffs2并将其加入到Linux内核(打补丁的方式)
#cdyaffs2
#./patch-ker.shc/home/arm/dev_home/kernel/linux-2.6.21.1/
6)友善2410所配网卡CS8900A驱动的移植
a.把cs8900.c,cs8900.h拷贝到drivers/net目录下。
b.修改drivers/net/Kconfig,增加以下内容:
configARM_CS8900
tristate"
CS8900support"
dependsonNET_ETHERNET&
&
ARM&
ARCH_SMDK2410
c.修改drivers/net/Makeflie,增加以下内容:
obj-$(CONFIG_ARM_CS8900)+=cs8900.o
d.在include/asm-arm/arch-s3c2410/map.h中添加如下定义:
#defineS3C2410_VA_NETS3C2410_ADDR(0x04000000)
#defineS3C2410_PA_NET__phys_to_pfn(0x19000000)
#defineS3C2410_SZ_NETSZ_1M
e.在arch/arm/mach-s3c2410/mach-smdk2410.c文件中添加CS8900A的地址信息
staticstructmap_descsmdk2410_iodesc[]__initdata={
/*nothinghereyet*/
{
.virtual
=S3C2410_VA_NET,
.pfn
=S3C2410_PA_NET,
.length
=S3C2410_SZ_NET,
.type
=MT_DEVICE,
以下修改为选做,可以不改:
随便在这里取消LCD的初始化,不然启动时会有出错信息(因为我现在的项目用不到,以后有空我会添上LCD的移植和GUI的移植):
staticstructplatform_device*smdk2410_devices[]__initdata={
&
s3c_device_usb,
//
s3c_device_lcd,
s3c_device_wdt,
s3c_device_i2c,
s3c_device_iis,
修改开发板的名称(可以自定义):
MACHINE_START(SMDK2410,"
GGY2410"
)
7)配置内核
在配置内核前,先拷贝s3c2410开发板的默认配置到内核根目录下,以简化配置过程。
#pwd
/home/arm/dev_home/kernel/linux-2.6.21.1
#cparch/arm/configs/s3c2410_defconfig.config
以下是在s3c2410_defconfig基础上要配置的选项(有一些必须的选项在s3c2410_defconfig里已经选上了,所以我没有写出来。
以下的选项非特别说明,可能不用选,我没有做实验证明哪些要、哪些不要,所以有兴趣的可以自己做实验看看)。
Generalsetup
--->
[*]Configurestandardkernelfeatures(forsmallsystems)
选上这项,否则文件系统中的一些选项不会出现
SystemType
S3C2410Machines
[*]SMDK2410/A9M2410
留下这项就够了,其他全部“N”掉
“N”掉S3C2412Machines
、S3C2440Machines
和S3C2443Machines
里的所有选项,都是和2410无关的选项。
Bootoptions
将(root=/dev/hda1roinit=/bin/bashconsole=ttySAC0)Defaultkernelcommandstring
改成
(noinitrdroot=/dev/mtdblock3
rootfstype=cramfs
console=ttySAC0init=/linuxrcmem=64M)Defaultkernelcommandstring
#说明:
#mtdblock3代表第4个flash分区,用来作根文件系统rootfs;
#console=ttySAC0,115200使kernel启动期间的信息全部输出到串口0上,波特率为115200;
#2.6内核对于串口的命名改为ttySAC0,但这不影响用户空间的串口编程。
#用户空间的串口编程针对的仍是/dev/ttyS0等
#mem=64M表示内存是64M,如果是32则设为32M
在实践中,我发现“rootfstype=cramfs”这句还是挺重要的。
如果没有这句,系统启动时即使分区挂载正确了,但是文件系统的类型有可能出错。
在这里定义过,就不会出错了。
这里的选项也和根文件系统的配置有关。
(我先使用cramfs做跟文件系统)
Userspacebinaryformats
<
>
Kernelsupportfora.outandECOFFbinaries(去除该选项,a.out和ECOFF是两种可执行文件的格式,在ARM-Linux下一般都用ELF,所以这两种基本用不上。
DeviceDrivers
“N”掉
Parallelportsupport
里的所有选项。
PlugandPlaysupport
里的所有选项一定要“N”掉,不然编译会出错!
!
Networkdevicesupport
Ethernet(10or100Mbit)
“N”掉<
DM9000support和<
GenericMediaIndependentInterfacedevicesupport
-------以下一定要选上,是CS8900A的驱动------
[*] CS8900support
-----------------------------
RealTimeClock
“N”掉[]
SetsystemtimefromRTConstartupandresume
#接下来做的是针对文件系统的设置,我实验时目标箱上要挂的根文件系统是cramfs,故做如下配置
(注意:
不要试图按照旧内核的方法增加devfs的支持,因为在这个内核里已经彻底删除了
devfs的源代码。
补救的办法就是用vivi的mdev来代替,在讲根文件系统的建立时我会说明,你也可以到网上找mdev的资料。
Filesystems-->
Secondextendedfssupport#去除对ext2的支持
Ext3journallingfilesystemsupport#去除对ext3的支持
*>
Kernelautomountersupport
Kernelautomounterversion4support(alsosupportsv3)
FilesysteminUserspacesupport
Pseudofilesystems-->
[*]Virtualmemoryfilesystemsupport(formershmfs)
Userspace-drivenconfigurationfilesystem(EXPERIMENTAL)
Miscellaneousfilesystems-->
YAFFS2filesystemsupport
“N”掉[]Autoselectyaffs2format和[]CacheshortnamesinRAM,因为这是给每页大于1024B的NANDFlash设计的
NetworkFileSystems-->
<
NFSfilesystemsupport
--以下最好选上,因为在挂载NFS时可能出现protocol不支持的情况--
[*]ProvideNFSv3clientsupport
[*]ProvideclientsupportfortheNFSv3ACLprotocolextension
[*]
ProvideNFSv4clientsupport(EXPERIMENTAL)
AllowdirectI/OonNFSfiles
-------------------------------------------------------------------------
NFSserversupport
ProvideNFSv3serversupport
[*]ProvideserversupportfortheNFSv3ACLprotocolextension
ProvideNFSv4serversupport(EXPERIMENTAL)
---
ProvideNFSserveroverTCPsupport
[*]RootfilesystemonNFS
保存退出,产生.config文件。
――――――――――――――――――――――――――――――――――――――――
8)编译内核
#makezImage
正常来说编译是不会出错的,只有一些警告,我试过可以正常在友善2410上启动。
=========================================
根文件系统
1)busybox的编译
a.修改busybox中的Makefile文件
找到ARCH和CROSS_COMPILE修改成如下:
=/usr/local/arm/3.3.2/bin/arm-linux-
b.配置
#makedefconfig
#makemenuconfig
主要修改配置如下:
BusyboxSettings--->
BuildOptions--->
[*]BuildBusyBoxasastaticbinary(nosharedlibs)
//选此项静态编译
BusyboxLibraryTuning--->
[*]Additionaleditingkeys
[*]vi-stylelineeditingcommands
[*]Historysaving
[*]Tabcompletion
[*]Usernamecompletion
//此几项主要是对shell命令对象文件名的记忆与填充
MiscellaneousUtilities--->
[]taskset
//选了就会出错(网上推荐的,自己还没试过)
------------------------------