好贷网好贷款

mini2440 移植linux2.6.30.10 及yaffs2文件系统 2011-03-12 10:17:18

发布时间:2016-12-5 22:37:06 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"mini2440 移植linux2.6.30.10 及yaffs2文件系统 2011-03-12 10:17:18",主要涉及到mini2440 移植linux2.6.30.10 及yaffs2文件系统 2011-03-12 10:17:18方面的内容,对于mini2440 移植linux2.6.30.10 及yaffs2文件系统 2011-03-12 10:17:18感兴趣的同学可以参考一下。

研究了四天linux内核移植和文件系统制作,总算移植成功,在这里和大家分享一下,我是一个初学者,有不对的地方,请大家指点。 参考网友的资料: http://blog.chinaunix.net/u3/104564/sho ... 91186.html http://www.ourdev.cn/bbs/bbs_content.js ... bs_id=1032 http://blog.sina.com.cn/s/blog_5fe42fc90100cp4z.html 一,准备工作 1,内核版本:2.6.30.10 busybox 1.13.0  编译器:arm-linux-3.4.1 文件系统:yaffs2 平台:mini2440  2,移植linux 1)Linux 2.6.30.10的下载地址: http://www.kernel.org/  2)yaffs2文件系统的下载地址: http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/  点击Download GNU tarball,下载cvs-root.tar.gz 3)busybox的下载地址: http://www.busybox.net/downloads/  我用的是busybox-1.13.0.tar.bz2  4)下载mkyaffs2image http://www.arm9.net/download-mkyaffs2image.asp  二、移植内核 1,解压内核源码包 # tar jxvf linux-2.6.30.10.tar.bz2 -C /opt/FriendlyARM/mini2440/ 2,进入内核目录 # cd /opt/FriendlyARM/mini2440/linux-2.6.30.10 3,修改顶层Makefile # gedit Makefile 在193行 ARCH ?= $(SUBARCH) CROSS_COMPILE ?= 修改为 ARCH ?=arm CROSS_COMPILE ?=arm-linux- 4,修改机器码 # gedit arch/arm/tools/mach-types 在379行 s3c2440 ARCH_S3C2440 S3C2440 362 修改为 s3c2440 ARCH_S3C2440 S3C2440 782 与supervivi传入的机器码参数一致即可! 5,修改时钟频率 # gedit arch/arm/mach-s3c2440/mach-smdk2440.c 在160行 static void __init smdk2440_map_io(void) { s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc)); //s3c24xx_init_clocks(16934400); //注释这句,加入下一句 s3c24xx_init_clocks(12000000); s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs)); } 6,修改Nand Flash分区 # gedit arch/arm/plat-s3c24xx/common-smdk.c 在109行 static struct mtd_partition smdk_default_nand_part[] = { [0] = { .name = "supervivi", .size = 0x00030000, .offset = 0, }, [1] = { .name = "Kernel", .offset = 0x00050000, .size = 0x00200000, }, [2] = { .name = "root", .offset = 0x00250000, .size = 0x03dac000, } }; 7,加入对yaffs2文件系统的支持 1,解压yaffs2文件系统源码包 # tar zxvf cvs-root.tar.gz -C /opt/FriendlyARM/mini2440/ 2,进入yaffs2源码目录 # cd /opt/FriendlyARM/mini2440/cvs/yaffs2 3,打补丁 # ./patch-ker.sh c ../../linux-2.6.30.10 Updating ../../linux-2.6.30.10/fs/Kconfig Updating ../../linux-2.6.30.10/fs/Makefile 8,配置内核 # cp arch/arm/configs/s3c2410_defconfig .config # make menuconfig 1,机器类型只选以下三项: System Type ---> S3C2410 Machines ---> [*] SMDK2410/A9M2410 S3C2440 Machines ---> [*] SMDK2440 [*] SMDK2440 with S3C2440 CPU module 2,我用得编译器是3.4.1没有配置Kernel Feature 3,File systems ---> [*] Miscellaneous filesystems ---> <*> YAFFS2 file system support 4,Boot options- noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0  9,重新编译内核 # make zImage 注意:如果是重新编译内核需要遵守以下步骤: 1、make dep make dep的意思就是说:如果你使用程序A(比如支持特殊设备),而A需用到B(比如B是A的一 个模块/子程序)。而你在做 make config的时候将一个设备的驱动 由内核支持改为module,或取消支持,这将可能影响到B的一个参数的设置,需重新编译B,重新编译或连接A....如果程序数量非常多, 你是很难手工完全做好此工作的。make dep实际上读取配置过程生成的配置文件,来创建对应于配置的依赖关系树,从而决定哪些需要编译而那些不需要编译。所以,你要make dep。 2、make clean 清除一些以前留下的文件,比如以前编译生成的目标文件,这一步必须要进行。否则,即使内核配置改动过,编译内核时还是将原来生成的目标文件进行连接,而不生成改动后的文件。 3、make zImage Linux 内核有两种映像:一种是非压缩内核,叫 Image,另一种是它的压缩版本,叫zImage。根据内核映像的不同,Linux内核的启动在开始阶段也有所不同。zImage是Image经过压缩 形成的,所以它的大小比 Image小。但为了能使用zImage,必须在它的开头加上解压缩的代码,将 zImage解压缩之后才能执行,因此它的执行速度比Image要慢。但考虑到嵌入式系统的存储空容量一般比较小,采用zImage可以占用较少的存储空 间,因此牺牲一点性能上的代价也是值得的,所以一般的嵌入式系统均采用压缩内核的方式。 编译完成后,会在内核目录arch/arm/boot/下生成zImage内核映像文件。 三,制作yaffs2文件系统 1,修改并配置BusyBox 解压busybox #tar jxvf busybox-1.13.0.tar.bz2 –C /opt/FriendlyARM/mini2440/ 2,然后进到源码中,修改Makefile 文件 ARCH ? =arm CROSS_COMPILE ?=arm-linux- 3,#make menuconfig,进入配置单: 然后配置如下:(没有列出的选项,可以采用默认,也可以根据自己的需要添加。) Busybox Settings ---> Build Options ---> [*] Build BusyBox as a static binary (no shared libs) Busybox Library Tuning ---> ( [*] vi-style line editing commands [*] Fancy shell prompts Linux Module Utilities ---> (/lib/modules) Default directory containing modules (modules.dep) Default name of modules.dep [*] insmod [*] rmmod [*] lsmod [*] modprobe --- Options common to multiple modutils 4,编译并安装BusyBox 在命令行输入:make;make install,编译结束后会在busybox-1.13.0根目录下面生成一个名为“_install”的目录。 完成busybox 的编译之后,我们就可以进行文件系统的构建了。 5,在“/opt/ FriendlyARM/mini2440/”目录下面建立一个“root_yaff2”的目录,复制刚刚编译出来的_install下的“bin” 目 录、“sbin”目录、“usr”目录和“linuxrc”到“root_2.6.25fs”目录下,然后新建“dev”、“etc”、“home”、 “lib”、“mnt”、“opt”、“proc”、“root”、“sys”、“tmp”、“var”和“web”目录,并在原有的“usr”目录下面 新建一个“lib”目录。 6,添加内容 1)“dev”目录 下面的内容在内核挂载完毕文件系统后,系统会使用mdev 自动建立。 不过mdev 是调用init 进程来启动的,在使用mdev 构建“dev”目录前,init 进程需要用到“/dev/console”和“/dev/null”这两个设备文件,所以,我们需要在制作文件系统时静态创建这两个设备文件,方法如下: #mknod console c 5 1 #mknod null c 1 3 如果不创建这两个设备文件,在文件系统启动时会出现错误信息.大概是不能初始化控制台。 2)“etc”目录 用来存放系统的配置文件。 在“etc”目录下面有如下常用的文件: fstab:指明需要挂载的文件系统; group:用户组; inittab:init 进程的配置文件; passwd:密码文件; profile:用户环境配置文件; mdev.conf:因为2.6.18 版本开始linux 放弃使用devfs 而采用udev(mdev 是udev 的简化版本),这里的 mdev.conf 文件可以是空,也可以按照一定规则来编写,这里我采用了为空; resolv.conf:存放DNS 信息的文件,访问外网时需要DNS 的信息。 常用的目录有: init.d 目录:启动文件目录,该目录下面有个“rcS”的文件,里面存放了系统启动时配置以及自启动加载 的进程等; sysconfig 目录:在我们的文件系统里面,该目录下面存放了名为“HOSTNAME”的文件,该文件内容为: tianchunlong,这句话就是我们在文件系统里面看到那个“[root@ tianchunlong /]” rc.d 目录:在我们的文件系统里面用来存放一些自启动所要调用的脚步等; boa 目录:我们的文件系统特有的目录,用来存放web 服务器的配置脚本。 下面分别列出“etc”下面各个文件的内容。 【fstab】: # device mount-point type options dump fsck order proc /proc proc defaults 0 0 tmpfs /tmp tmpfs defaults 0 0 sysfs /sys sysfs defaults 0 0 tmpfs /dev tmpfs defaults 0 0 var /dev tmpfs defaults 0 0 【group】: root:*:0: daemon:*:1: bin:*:2: sys:*:3: adm:*:4: tty:*:5: disk:*:6: lp:*:7:lp mail:*:8: news:*:9: uucp:*:10: proxy:*:13: kmem:*:15: dialout:*:20: fax:*:21: voice:*:22: cdrom:*:24: floppy:*:25: tape:*:26: sudo:*:27: audio:*:29: ppp:x:99: 500:x:500:tianchunlong 501:x:501:tianchunlong 【inittab】:参考busybox 源码下面的“examples/inittab”文件 # /etc/inittab ::sysinit:/etc/init.d/rcS s3c2410_serial0::askfirst:-/bin/sh ::ctrlaltdel:/sbin/reboot ::shutdown:/bin/umount -a -r 注 意:上面红色部分在busybox 的参考文件中是ttySAC0,而在s3c24xx 系列芯片的串口驱动里面我们用了s3c2410_serial 做为设备名(在内核源码的“drivers/serial/s3c2410.c”文件的949 行),然后我们又是用的串口0 作为控制台的,所以这里我们使用s3c2410_serial0。 【passwd】: root::0:0:root:/:/bin/sh ftp::14:50:FTP User:/var/ftp: bin:*:1:1:bin:/bin: daemon:*:2:2:daemon:/sbin: nobody:*:99:99:Nobody:/: tianchunlong:$1$8GIZx6d9$L2ctqdXbYDzkbxNURpE4z/:502:502:Linux User,,,:/home/tianchunlong:/bin/sh 【profile】: # Ash profile # vim: syntax=sh # No core files by default #ulimit -S -c 0 > /dev/null 2>&1 USER="`id -un`" LOGNAME=$USER PS1='[\u@\h \W]# ' PATH=$PATH HOSTNAME=`/bin/hostname` export USER LOGNAME PS1 PATH 【mdev.conf】: 暂时空 【resolv.conf】: nameserver 202.96.128.166 【init.d/rcS】: #!/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin runlevel=S prevlevel=N umask 022 export PATH runlevel prevlevel # # Trap CTRL-C &c only in this shell so we can interrupt subprocesses. # mount -a mkdir /dev/pts mount -t devpts devpts /dev/pts echo /sbin/mdev > /proc/sys/kernel/hotplug mdev -s mkdir -p /var/lock /bin/hostname -F /etc/sysconfig/HOSTNAME 注意:在上面红色部分是关于mdev 的使用,请参考busybox 的“docs/mdev.txt”文件。 最后还要改变它的属性使它能够执行。chmod +x etc/init.d/rcS 【rc.d/init.d/httpd】: #!/bin/sh base=boa # See how we were called. case "$1" in start) /sbin/$base ;; stop) pid=`/bin/pidof $base` if [ -n "$pid" ]; then kill -9 $pid fi ;; esac exit 0 【boa/boa.conf】: 空 【sysconfig/HOSTNAME】: tianchunlong 3)“home”目录 存放用户文件的目录,在这里,我建立了一个名为“tianchunlong”的目录,前面的passwd 文里面有个用户名就是对应tianchunlong这个目录 “lib”目录 常用的库文件,获取库文件的方法: #cp -f -a /usr/local/arm/3.4.5/arm-linux/lib/*so* ./lib  这里拷贝了常用的库文件,如果需要特殊的库,需要再从相应的位置复制过来。 4)“mnt”目录 我们一般用来挂载的U 盘之类的外设,这里建立两个目录“udisk”和“sd”,分别用来挂载U 盘和SD卡。 5)“opt”目录 空 6)“proc”目录 提供一些目录和虚拟文件系统。 7)“root”目录 超级用户的目录。 8)“sys”目录 9)“tmp”目录 存放临时文件的目录。 10)“var”目录 存放临时文件的目录。 11)“web”目录 存放web 服务器的相关文件的目录,建议直接从以前制做好的文件系统中拷贝过来。 12)“lib”目录 讲mini2440的根文件系统root_qtopia.tar.gz解压讲lib目录下的所以库函数拷贝到lib目录下。 7,到此,文件系统的框架就基本搭好了,然后把它做出yaffs 文件系统格式的镜像就可以使用了。使用如下命令制作: #mkyaffs2image root_yaffs2/ root_yaffs2.img 烧写到开发板即可进入控制台。

上一篇:网卡驱动
下一篇:转载:异步IO、APC、IO完成端口、线程池与高性能服务器之一 异步IO

相关文章

相关评论