一、工具下载
1、Linux3.5.2下载
下载地址:www.kernel.org
2、yaffs2代码
进入http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/,点击“DownloadGNU
tarball”,下载后出现cvs-root.tar.gz压缩包。
3、busybox-1.13.3
从http://www.busybox.net/downloads/下载busybox,这里下载的是busybox-1.13.3.tar.gz。
4、根文件系统制作工具
到友善之臂http://www.arm9.net/网站下载根文件系统制作工具
mkyaffs2image.tgz。
5、友善之臂的根文件系统
在制作根文件系统时,需要用到链接库,为保证链接库能用直接用友善之臂
的根文件系统root_qtopia中的链接库lib,到友善之臂网站http://www.arm9.net/
下载root_qtopia.tgz。
6、硬件平台
友善之臂的tiny4412
二、Linux3.5.2内核移植
1、修改对硬件平台的支持。
先添加对arm的支持,在linux-3.5.2主目录下的Makefile文件下添加如下信息:
ARCH?=arm
CROSS_COMPILE?=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-
2、修改平台时钟
找到内核源码arch/arm/mach-exynos/mach-tiny4412.c文件,在函数static
void__initsmdk4x12_map_io(void)中,修改成s3c24xx_init_clocks(24000000)。
3、修改Nandflash分区信息
很多人的做法是直接修改arch/arm/plat-s3c24xx/Common-smdk.c文件里面的smdk_default_nand_part数据结构,这样是不提倡的做法,因为还是那句话,破坏了内核。我们应该在arch/arm/mach-exynos/mach-tiny4412.c文件中建立我们自己板文件的nand信息。我们在mach-tiny4412.c的staticstructplatform_device*smdk2440_devices[]前面添加:
staticstructmtd_partitionsmdk_default_nand_part[]={
[0]={
.name="loader",
.size=SZ_256K,
.offset=0,
},
[1]={
.name="kernel",
.offset=MTDPART_OFS_APPEND,
.size=SZ_1M+SZ_256K+SZ_512K,
},
[2]={
.name="root",
.offset=SZ_2M,
.size=SZ_32M,
},
[3]={
.name="user1",
.offset=MTDPART_OFS_APPEND,
.size=MTDPART_SIZ_FULL,
}
};
修改nandflash的参数:
在同一个文件中找到
staticstructs3c2410_platform_nandsmdk_nand_info={
.tacls=20,
.twrph0=60,
.twrph1=20,
.nr_sets=ARRAY_SIZE(smdk_nand_sets),
.sets=smdk_nand_sets,
};
改成
staticstructs3c2410_platform_nandsmdk_nand_info={
.tacls=0,
.twrph0=30,
.twrph1=0,
.nr_sets=ARRAY_SIZE(smdk_nand_sets),
.sets=smdk_nand_sets,
};
drivers/mtd/nand/s3c2410.c
839chip->ecc.mode=NAND_ECC_NONE;//NAND_ECC_SOFT;
4、建立板文件支持
修改arch/arm/mach-exynos/mach-tiny4412.c文件将MACHINE_START宏括号里面的名字换成ID换成TINY4412,,这个ID最终会被扩展为MACH_TYPE_TINY4412。然后到arch/arm/tools/mach_types里面找对应的ID号,所有做完以这一步我们要在mach_types添加我们机器的ID。
以下为主要步骤:
A、重新复制一份mach-smdk4x12.c,并命名为mach-tiny4412.c
[root@localhostarch]#cparm/mach-exynos/mach-smdk4x12.carm/mach-exypons/mach-
tiny4412.c
利用vi命令打开mach-tiny4412.c文件,修改如下内容(黄色区域)

B、[root@localhostlinux-3.5.2]#cdarch/arm/tools
[root@localhosttools]#vimach_types
然后在mach_types里面添加我们机器的ID,再最后一行添加
Tiny4412MACH_TINY4412TINY44124173
第一个表示机器名字,第二个在Kconfig配置项里面定义的宏名称,下面一步我们会定义到,我们取名为MACH_tiny4412,第三表示MACH_START第一个参数ID名字,第四个是ID号,ID号我们取为4173。
C、修改arch/arm/mach-exynos/目录下的Kconfig和Makefile,以建立内核对板文件的支持使其可以被配置和编译进内核。
首先修改Kconfig,在endmenu之前加入下面的内容:

再修改Makefile,在Makefile文件中添加如下一行:obj-$(CONFIG_MACH_TINY4412)+=mach-tiny4412.o
D、配置Linux内核
进入linux-3.5.2内核主目录,通过以下命令将exynos的默认配置文件写到
当前目录下的.config
[root@localhostlinux-3.5.2]#cparch/arm/configs/exynos4_defconfig./
[root@localhostlinux-3.5.2]#makeexynos4_defconfig
执行加载默认配置文件后,可以开始配置新增加的菜单
[root@localhostlinux-3.5.2]#makemenuconfig
进入SystemTypes菜单项,打开SAMSUNGEXYNOSSoCsSupport--->菜单,出现一个目标开发板的列表:

选中tiny4412选项,然后执行makezImage,如果能够正常编译,可以将能够将体内一412板文件编译进内核.。
如下为编译成功截图:

三、根文件系统的制作
1、建立根文件系统目录
进入到/opt/MyARM目录,新建建立根文件系统目录的脚本文件
create_rootfs_bash,使用命令chmod+xcreate_rootfs_bash改变文件的可执行权
限,./create_rootfs_bash运行脚本,就完成了根文件系统目录的创建。
#!/bin/sh
echo"------Createrootfsdirectonsstart...--------"
mkdirrootfs
cdrootfs
echo"--------Createroot,dev....----------"
mkdirrootdevetcboottmpvarsysproclibmnthome
mkdiretc/init.detc/rc.detc/sysconfig
mkdirusr/sbinusr/binusr/libusr/modules
echo"makenodeindev/consoledev/null"
mknod-m600dev/consolec51
mknod-m600dev/nullc13
mkdirmnt/etcmnt/jffs2mnt/yaffsmnt/datamnt/temp
mkdirvar/libvar/lockvar/runvar/tmp
chmod1777tmp
chmod1777var/tmp
echo"-------makedirectiondone---------"
改变了tmp目录的使用权,让它开启sticky位,为tmp目录的使用权开启此
位,可确保tmp目录底下建立的文件,只有建立它的用户有权删除。尽管嵌入式
系统多半是单用户,不过有些嵌入式应用不一定用root的权限来执行,因此需
要遵照根文件系统权限位的基本规定来设计。
动态链接库直接用友善之臂的,先解压友善之臂的根文件包,拷贝lib的内
容到新建的根文件目录lib内。
tar–zxvfroot_qtopia.tgz–C/opt/MyARM
cp–rfd/opt/MyARM/root_qtopia/lib/*/opt/MyARM/rootfs/lib/*
2交叉编译busybox
tar–zxvfbusybox-1.13.3.tar.tgz–C/opt/MyARM
3、进入源码,修改Makefile文件:
cd/opt/MyARM/busybox-1.13.3
修改:
CROSS_COMPILE?=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-
ARCH?=arm
4、配置busybox
输入makemenuconfig进行配置
(1)、BusyboxSettings--->
GeneralConfiguration--->
[*]Showverboseappletusagemessages
[*]Storeappletusagemessagesincompressedform
[*]Support–install[-s]toinstallappletlinksatruntime
[*]Enablelocalesupport(systemneedslocaleforthistowork)
GeneratedbyFoxitPDFCreatorFoxitSoftware
http://www.foxitsoftware.comForevaluationonly.portfor–long-options
[*]Usethedevptsfilesystemforunix98PTYs
[*]Supportwritingpidfiles
[*]RuntimeSUID/SGIDconfigurationvia/etc/busybox.config
[*]Suppresswarningmessageif/etc/busybox.confisnotreadable
BuildOptions--->
[*]BuildBusyBoxasastaticbinary(nosharedlibs)
[*]BuildwithLargeFileSupport(foraccessingfiles>2GB)
InstallationOptions->
[]Don’tuse/usr
Appletslinks(assoft-links)--->
(./_install)BusyBoxinstallationprefix
BusyboxLibraryTuning--->
(6)Minimumpasswordlegth
(2)MD5:TradeBytesforSpeed
[*]Fsater/procscanningcode(+100bytes)
[*]Commandlineediting
(1024)Maximumlengthofinput
[*]vi-stylelineeditingcommands
(15)Historysize
[*]Historysaving
[*]Tabcompletion
[*]Fancyshellprompts
(4)Copybuffersize,inkilobytes
[*]Useioctlnamesratherthanhexvaluesinerrormessages
[*]SupportinfinibandHW
下面的选项将增加对mdev的支持。
LinuxSystemUtilities--->
[*]Support/etc/mdev.conf
[*]Supportcommandexecutionatdeviceaddition/removal
cd/opt/MyARM/busybox-1.13.3
makeCONFIG_PREFIX=/opt/MyARM/rootfsinstall
在rootfs目录下会生成目录bin、sbin、usr和文件linuxrc的内容。
6建立etc目录下的配置文件
1)、etc/mdev.conf文件,内容为空。
2)、拷贝主机etc目录下的passwd、group、shadow文件到rootfs/etc目录下。
3)、etc/sysconfig目录下新建文件HOSTNAME,内容为”YuYanze”。
4)、etc/inittab文件:
#etc/inittab
::sysinit:/etc/init.d/rcS
::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount-a–r
5)、etc/init.d/rcS文件:
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask022
exportPATHrunlevelprevlevel
echo"----------muntall----------------"
mount-a
mdev-s
echo"***********************************************"
echo"****************MyARM*********************"
echo"Kernelversion:linux-3.5.1"
echo"Student:Yuyanze"
echo"Date:2015.12.15"
echo"***********************************************"
/bin/hostname-F/etc/sysconfig/HOSTNAME
使用以下命令改变rcS的执行权限:
Chmod+xrcS
6)、etc/fstab文件:
#devicemount-pointtypeoptiondumpfsckorder
proc/procprocdefaults00
none/tmpramfsdefaults00
sysfs/syssysfsdefaults00
mdev/devramfsdefaults00
7)、etc/profile文件:
#Ashprofile
#vim:syntax=sh
#Nocorefilebydefaults
#ulimit-S-c0>/dev/null2>&1
USER="id-un"
LOGNAME=$USER
PS1='[\u@\h=W]#'
PATH=$PATH
HOSTNAME='/bin/hostname'
exportUSERLOGNAMEPS1PATH
7、制作根文件系统映像文件
使用以下命令安装好yaffs文件系统制作工具:
tar–zxvfmkyaffs2image.tgz–C/
在/opt/MyARM目录下,使用命令mkyaffs2imagerootfsrootfs.img生成根文件系统映像文件。 |