第l0卷第2期 柳州职业技术学院学报 JOURNAL OF LIUZHOU VOCA ̄ONAL&TECHNICAL COLLEGE Vo1.10 No.2 2010年6月 Jun.2010 [理工农学研究] 基于¥3C241 0的嵌入式Li n ux操作系统移植方法 冯达芳 (柳州职业技术学院 电子电气工程系,广西柳州 545006) 摘要:主要介绍了Linux一2.6.24.4内核的移植和根文件系统的制作,并描述了嵌入式Linux操作 系统移植到S3C2410的全过程。 关键词:¥3C2410;嵌入式Linux;移植过程;内核的移植;根文件系统的制作 中图分类号:TP311.54 O引言 文献标志码:A 文章编号:1671—1084(2010)02—0034—04 嵌入式系统已经渗透到人们日常生活的各个方面。SAMSUNG公司的¥3C2410是一款 ARM920T内核的16/32位RISC嵌入式微处理器,它的最高运行频率达到203MHz,性价比高、功 耗低。应用领域广泛。Linux操作系统以其源代码的开放性、内核可裁剪性、运行稳定性、支持多种 处理器、支持多任务多文件系统以及丰富的网络功能等特性在嵌入式系统中得到广泛应用。 本文主要研究嵌入式Linux操作系统在¥3C2410上移植的两部分核心内容:Linux一2.6.24.4内核 的移植和根文件系统的制作。最后介绍嵌入式Linux操作系统移植到¥3C2410的全过程。 1嵌入式系统开发环境 进行嵌入式系统设计,通常使用PC机和目标板交叉编译的开发模式。交叉编译是在PC机上编 译并生成能够在目标板上运行的代码,然后下载到目标板上运行调试。 本系统硬件平台采用广州友善之臂计算机科技有限公司设计生产的SBC2410V6开发板,它基于 三星公司ARM9处理器¥3C2410X,具有高性能、低功耗、接口丰富和体积小等优良特性。 主机PC的开发环境为:VMware6.0+Fedora Linux6,Kernel version 2.6.18;gcc编译器为 gcc4.1.1:交叉编译器为anTi—linux—gcc3.4.1。需要说明的是arm-hnux-gcc3.4.1放在/usr/local/arm目 录下.并添加到环境变量PATH中。 2 Linux一2.6.24.4内核移植 下载Linm(一2.6.24.4内核,解压并放到/根目录下。 1)编辑Makefile文件,修改目标CPU的体系结构和交叉编译工具的路径。 ≠≠cd /linux-2.6.24.4 #gedit Makefile ARCH?=am3 CRoSSCoMPILE?=/usr/local/arm/3.4.1/bin/arm—linux— —COMPILE为交叉编译器所在位置,要根据自己所使用的交叉编译器路径设置。 2)拷贝一个系统默认的config作为模板 CROSS—#cp arch/arm/configs/s3c2410de ̄onfig_.config 收稿日期:2010—03—15 基金项目:广西教育科学“十一五”规划2010年度立项课题“高职嵌入式专业人才培养模式研究” (2010C214) 作者简介:冯达芳(1957一),男,广西平南县人,柳州职业技术学院教师,工学硕士,研究方向:机电一体化、自动控制 技术。 第l0卷第2期 冯达芳:基于¥3C2410的嵌入式LinuX操作系统移植方法 35 3)修改NandFlash分区信息 #gedit arch/arm/plat—s3c24xx/common—smdk.C smdkdefaultnand___part口修改如下: ..【0] = { name=”vivi”,//Bootloader分区 ot ̄et=OxO, size=0x00020000, size=0x00200000, .} , [3] { name ...”root”. //文件系统分区 .} , 【1】 = { name=”param”, .offset=0x002b0000, size:0x01400000, .//参数分区 offset=0x00020000, size=0x000 1 0000。 .) , [4] { name ”user”. .7 7 芦分区 .) , 【2】 { name=”kernel”, //内核分区 offset=OxOOObO000, .offset=0x016b0000, size=0x02880000, .) , .分区大小可根据情况自己设置,但是注意要和vivi的一致。 4)使内核支持devR,要求系统在启动时并在/sbin/init运行之前能够自动挂载/dev为devfs文件 系统。 #gedit/linux一2.6.24.4/fs/Kconfig 在906行menu”Pseudo flesiystems”下面添加如下代码: config DEVFSFS _config DEVFS MOUNT bool”Automatically mount at boot” bool”/dev file system support (OBSOLETE)”default y default Y depends on DEVFSF —5)禁用Flash ECC校验 #gedit drivers/mtd/nand/s3c2410.c 在第668行找到chip-+ecc.mode=NAND_ECC_SOFT; 改为chip--+ecc.mode=NAND_ECC_NONE; 如果不修改该处,分区后的flash识别不出来,导致错误出现。 现在可以编译内核了.执行make menuconfig 在配置菜单中,选择System type--+s3c2410 Machines中的SMDK2410/A9M2410,其他的arch— machines全部取消。 #make 编译完成后在/linux一2.6.24.4/arch/arm/boot下会有一个zImage,这样就有了个最基本的内核, 已经是可以启动的。 6)使内核支持yaffs文件系统 yaffs是一个专门为NAND Flash存储器设计的嵌入式可读可写的文件系统,具有文件系统加载 速度快、文件访问速度快等优点。下载yaffs2文件系统的源码包并解压,运行里面的patch—ker.sh脚 本,#sh patch—ker.sh c/hnux一2.6.24.4。 然后再配置一下内核。在File systems中的Miscellaneous flesiystems---+= ̄面的yafs选项如下进行 选择: < >YAFFS2 file system support 一 一512 byte page devices 一【木】Lets Yaffs do its own ECC 木一 2048 byte(or larger) /page devices oselect yaf ̄2 format [术] Aut【水】 Disable lazy loading 36 柳州职业技术学院学报 2010年6月 [木】Turn off wide tnodes 最主要是选择这个Lets Yaff ̄do its own ECC,如果没选就会有很多错误。保存配置,重新编译 内核。 3根文件系统的制作 在Linux系统中.所有的文件和设备都是以文件的形式来管理的.而根文件系统是所有文件和设 备节点的起始点,它为Linux的运行提供了最基本的丁具、库、脚本和一些特殊文件的支持,是决定 系统能否正常启动的关键。 根文件系统是系统刚启动时默认使用的文件系统。下面介绍利用busybox一1.9.2工具来制作嵌人 式Linux根文件系统的具体方法 1)首先下载busybOX一1.9.2,解压缩N/根目录后,修改/busybOX一1.9.2目录下Makefile文件中目 标CPU的体系结构和交叉编译_[具的路径。 ≠≠vi Makefile AR H_? arln CROSSCOMPILE?=/mr/local/arm/3.4.1/bin/arm-linux- 2)运行make menuconfig,进人配置环境,选择静态加载链接库,减少了在加载时查找动态链 接库的麻烦。 BusyBox Settings一一一> Build Options一一一> 【水】 Build BusyBox as a static binary(no shared libs) Linux Module Utilities----> [] Support version 2.2.X to 2.4.X Linux kernels 【术】 Support version 2.6.X Linux kernels 3)编译busybOX make ≠≠make install 在/busybox一1.9.2/inst ̄l目录下会生成我们需要的文件。 _4)接下来做几个脚本来直接生成根文件系统 ≠≠! /bin/sh ≠≠≠≠≠≠≠≠≠≠创建主文件夹及其相关文件夹/root ̄/*#≠≠≠≠≠≠# ≠≠≠≠≠≠≠≠≠≠创建/rooffs/etc/profile≠≠#≠≠≠≠≠≠ ≠≠≠≠≠≠群≠≠创建/rootfs/etc/fstab≠≠≠≠#≠≠≠≠ ≠≠≠≠≠≠≠≠≠≠创建/rootif/etc/inittab≠≠#≠≠≠≠≠≠ ≠≠≠≠≠≠#≠≠创建/rootf ̄/etc/init.d和rsS≠≠≠≠##≠≠ #! /bin/sh ≠≠设置主机名,需要在etc建立文件host ≠≠≠≠≠≠≠≠≠≠创建/rootif/etc/mdev.conf≠≠≠≠≠≠≠≠≠≠ ≠≠≠≠≠≠≠≠#仓4建/root /etc/host≠≠#≠≠≠≠# ≠≠≠≠≠≠≠≠≠≠创建/root /etc/passwd≠≠≠≠≠≠≠≠≠≠ ≠≠#≠≠≠≠≠≠创建/root ̄/etc/group≠≠≠≠≠≠≠≠≠≠ ≠≠#撑≠≠≠≠创建/root /etc/shadow≠≠荐≠≠≠≠≠≠ ≠≠创建/rootfs/usr/share/udhcDc/default.script≠≠ 第10卷 第2期 冯达芳:基于¥3C2410的嵌入式Linux操作系统移植方法 37 ≠≠≠≠≠≠≠≠≠≠拷贝必要的lib≠≠#≠≠≠≠≠≠ 4嵌入式Linux操作系统的安装过程 配置好了内核和根文件系统之后,就可以进行整个操作系统的移植了。具体步骤如下: 1)下载并安装vivi到flash的vivi分区,修改vivi分区与内核NandFlash分区信息一致。 2)把内核烧写进flash的kerne1分区里面。 ≠≠load flash kernel u 3)把rq.Cran ̄s根文件系统烧写到flash的user分区里面。 ≠≠load flash user U 4)修改Linux内核的启动参数从user分区启动,启动后用yaffs格式化掉root分区,再把根文件 系统拷贝到root分区 param set linux cmdline”noinitrd root _/dev/mtdblock4 init /linuxrc console ttySACO. 115200”。保存,重启后执行: ≠≠flasheraseall/dev/mtd3 _≠≠mount—t yaffs/dev/mtdblock3/mnt/yaffs 如果出现mount:mounting/dev/mtdblock3 on/nmt/yaffs failed:Device or resource busy。先卸 载yaffs,然后再挂载一次。 ≠≠tar—zxvf/rootfs.tar —C/mnt/yaffs 5)修改Linux内核的启动参数从root分区启动,启动后用yaffs格式化掉user分区,并把该分区 挂载到相应目录 param set linuxcmdline”noinitrd root=/dev/mtdblock3 init /linuxrc console=ttySACO,1 1 5200”。 __保存,重启后执行: ≠≠flasheraseall/dev/mtd4 _≠≠mount—t yaffs/dev/mtdblock3/????(把该分区挂载到你想要的目录) 到此,整个系统安装过程结束。一个全部都可读可写的嵌入式Linux操作系统就安装成功了。 5结语 基于 ̄+Linux结构体系的嵌入式系统的开发已经成为了研究热点。本文经过多次的试验总结 之后.成功完成了嵌入式Linux操作系统在¥3C2410上的移植工作。希望本文能为嵌入式系统的学 习者提供借鉴,相信以ARM的优越性能和Linux的开放性,基于ARM+Linux的嵌入式系统将会得 到更广泛的应用。 参考文献: f11于明,范书瑞,曾祥烨编著.ARM9嵌入式系统设计与开发教程[M】.北京:电子工业出版社,2006. 孙纪坤,张小全编著.嵌入式Linux系统开发技术详解:基于AKM[M].北京:人民邮电出版社,2006. [3]Kevin.Linux2.6.24.4移植到S3C2410(nano24210)之:内核移植篇[EB/OL].(2008—04—05)http://blog.chinaunix.net/u2/63560/ showart 51 1924.htm1. 【4】李丛,赵恒永.基于¥3C2410的2.6Kernel移植[EB/OL].(2008—05—15)http://www.paper.edu.cn. 『51广州友善之臂计算机科技有限公司.SBC-2410X使用手册Version0.9 JR].2004—10. Porting of Linux Embedded OS Based on S3C2410 FENG Da——fang (Department of Electronic and Electicalr Engineering,Liuzhou Vocational and Technical College,Li- uzhou545006,China) Abstract:This paper introduces how to port kernel of Linux一2.6.24.4 and make root file system,and then describes the whole porting process to the¥3C2410 embedded Linux operating system. Key words:¥3C2410;embedded Linux;porting process;kernel porting;making root file system