移植linux系统到QQ2440V3之三(利用busybox制作ya..
时间:2009-06-27 来源:whbarm9
在前面系统移植两步之后,如果烧入到NAND FLASH,会出现下面的信息
VFS: Mounted root (jffs2 filesystem).
Freeing init memory: 144K
Warning: unable to open an initial console.
Kernel panic - not syncing: No init found. Try passing init= option to kernel. 出现这个信息是因为还没有移植根文件系统,下面分析如何一步一步移植yaffs和jffs2文件系统 1.移植时可以参考网络上的一些文档,《Linux系统移植》和 《构建嵌入式linux系统》,可以在百度或google里面搜索下载 2.准备代码文件 : FHS标准,描述linux根文件系统目录结构的介绍文档,下载地址http://www.pathname.com/fhs Busybox,代码下载地址http://www.busybox.net/downloads/下载busybox-1.7.0.tar.bz2 Glibc库文件,可以使用制作交叉编译里面的arm-linux/lib下面的库文件 MTD设备工具包,代码 第一步,编译安装Busybox,首先是解压文件,将busybox-1.7.0拷贝到/work/busybox目录 $ tar xjf busybox-1.7.0.tar.bz2 $ cd busybox-1.7.0 $ make menuconfig 第二步,配置Busybox,进入配置,除了使用默认的配置外,下面修改几个地方 1)设置"TAB"键,设置如下 Busybox Settings ---> Busybox Library Tuning ---> [*] Tab completion 2)连接/编译选项,使用动态链接的Busybox,在构建根文件系统时需要在/lib目录下放置glibc的库 文件,设置如下 Build options ---> [] Build BusyBox as a static binary (no shared libs) 3)Archival Utilities选项,tar选项设置如下 Archival Utilities ---> [*] tar [*] Enable archive creation [*] Enable -j option to handle .tar.bz2 files [*] Enable -X (exclude from) and -T (include from) options) [*] Enable -z option [*] Enable -Z option [*] Enable support for old tar header format [*] Enable support for some GNU tar extensions [*] Enable long options 4)Linux Module Utilities选项,要使用可加载模块,下面配置要选上 Linux Module Utilities ---> [*] insmod [*] Module version checking [*] Add module symbols to kernel symbol table [*] In kernel memory optimization (uClinux only) [*] Enable load map (-m) option [*] Symbols in load map [*] rmmod [*] lsmod [*] Support version 2.6.x Linux kernels 5)Linux System Utilities选项,支持mdev,这可以方便构造/dev目录,并且可以支持热插拔设 备,并支持mount,unmount命令,并让mount命令支持NFS网络系统 Linux System Utilities ---> [*] mdev [*] Support /etc/mdev.conf [*] Support command execution at device addition/removal [*] mount [*] Support mounting NFS file systems [*] umount [*] umount -a option 6)Networking Utilities选项,增加ifconfig命令 Networking Utilities ---> [*] ifconfig [*] Enable status reporting output (+7k) [ ] Enable slip-specific options "keepalive" and "outfill" [ ] Enable options "mem_start","io_addr",and "irq" [*] Enable option "hw" (ether only) [*] Set the broadcast automatically 7)Miscellanous Utilities设置 Miscellanous Utilities ---> [ ] taskset 8)Runit Utllities设置 Runit Utllities ---> [ ] runsv 第三步,编译Busybox,先修改Makefile文件如下 175 ARCH ?= $(SUBARCH) 176 CROSS_COMPILE?= 修改为 175 ARCH ?= arm 176 CROSS_COMPILE?= arm-linux- 然后执行make编译Busybox 然后安装,先建如下目录/work/nfs_root/fs_mini,然后执行这个命令 $ make CONFIG_PREFIX=/work/nfs_root/fs_mini install 此时会在/work/nfs_root/fs_mini下生成bin,linuxrc,sbin,usr目录文件夹 第四步,添加glibc库,由于前面设置使用的是动态库,我们这里只需要加载器和动态库,操作如下 $ mkdir -p /work/nfs_root/fs_mini/lib $ cd /work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib $ cp *.so* /work/nfs_root/fs_mini/lib -d 第五步,构建根文件系统,主要是构建各个目录和相关文件的配置 1)构建etc目录,这里主要创建三个文件etc/inittab;etc/init.d/rcS;etc/fstab,init进程根 据/etc/inittab文件来创建其他子程序,比如调用脚本配置IP地址,挂载其他文件系统,最后启动 shell等 a)创建etc/inittab文件,在/work/nfs_root/fs_mini/etc的inittab文件如下 # /etc/inittab ::sysinit:/etc/init.d/rcS ttySAC0::askfirst:-/bin/sh ::ctrlaltdel:/sbin/reboot ::shutdown:/bin/umount -a -r b)创建etc/init.d/rcS文件,这是一个脚本文件,可以在里面添加自动执行命令,以下命令配置 IP地址,挂载/etc/fstab指定的文件系统 #!/bin/sh //运行时解析/bin/sh ifconfig eth0 192.168.1.17//用来配置IP地址 mount -a //挂载etc/fstab文件指定的所有文件系统 然后修改它的属性chmod +x etc/init.d/rcS c)创建etc/fstab文件,内容如下 # device mount-point type options dump fsck order proc /proc proc defaults 0 0 tmpfs /tmp tmpfs defaults 0 0 2)构建dev目录,有两种方式构建dev目录,一是静态创建设备文件,二是使用mdev创建设备文件,下 面使用静态创建设备文件 $ mkdir -p /work/nfs_root/fs_mini/dev $ cd /work/nfs_root/fs_mini/dev $ mknod console c 5 1 $ mknod null c 1 3 $ mknod ttySAC0 c 204 64 $ mknod mtdblock0 b 31 0 $ mknod mtdblock1 b 31 1 $ mknod mtdblock2 b 31 2 3)构建其他目录,比如proc,mnt,tmp,sys,root等 $ cd /work/nfs_root/fs_mini $ mkdir proc mnt tmp sys root 到这里,一个小的根文件系统就做好了,但要烧录到nand flash上,还要制作成yaffs或jffs2 文件镜像 第六步,制作yaffs文件镜像 1)解压yaffs压缩包,进入里面的yaffs2文件夹,拷贝mkyaffsimage工具至/usr/local/bin目录 下,然后执行下面命令生成镜像文件 $ cp mkyaffsimage /usr/local/bin $ chmod +x /usr/local/bin/mkyaffsimage $ cd /work/nfs_root $ mkyaffsimage fs_mini fs_mini.yaffs 在当前目录就生成了fs_mini.yaffs镜像文件 第七步,制作jffs2文件镜像 1)编译制作jffs2映象文件的工具,在网上下载mtd-utils-05.07.23.tar.bz2工具包和zlib压缩 包,进行解压和安装如下 $ tar xjf zlib-1.2.3.tar.gz $ cd zlib-1.2.3 $ ./configure --shared --prefix=/usr $ make $ make install 2)编译mkfs.jffs2 $ tar xjf mtd-utils-05.07.23.tar.bz2 $ cd mtd-utils-05.07.23/util $ make $ make install 3)制作jffs2映象文件 $ cd /work/nfs_root $ mkfs.jffs2 -n -s 512 -e 16KiB -d fs_mini -o fs_mini.jffs2 到这里,内核和根文件系统都制作好了,下节介绍如何烧录到板子上,如何设置参数自动启动
Freeing init memory: 144K
Warning: unable to open an initial console.
Kernel panic - not syncing: No init found. Try passing init= option to kernel. 出现这个信息是因为还没有移植根文件系统,下面分析如何一步一步移植yaffs和jffs2文件系统 1.移植时可以参考网络上的一些文档,《Linux系统移植》和 《构建嵌入式linux系统》,可以在百度或google里面搜索下载 2.准备代码文件 : FHS标准,描述linux根文件系统目录结构的介绍文档,下载地址http://www.pathname.com/fhs Busybox,代码下载地址http://www.busybox.net/downloads/下载busybox-1.7.0.tar.bz2 Glibc库文件,可以使用制作交叉编译里面的arm-linux/lib下面的库文件 MTD设备工具包,代码 第一步,编译安装Busybox,首先是解压文件,将busybox-1.7.0拷贝到/work/busybox目录 $ tar xjf busybox-1.7.0.tar.bz2 $ cd busybox-1.7.0 $ make menuconfig 第二步,配置Busybox,进入配置,除了使用默认的配置外,下面修改几个地方 1)设置"TAB"键,设置如下 Busybox Settings ---> Busybox Library Tuning ---> [*] Tab completion 2)连接/编译选项,使用动态链接的Busybox,在构建根文件系统时需要在/lib目录下放置glibc的库 文件,设置如下 Build options ---> [] Build BusyBox as a static binary (no shared libs) 3)Archival Utilities选项,tar选项设置如下 Archival Utilities ---> [*] tar [*] Enable archive creation [*] Enable -j option to handle .tar.bz2 files [*] Enable -X (exclude from) and -T (include from) options) [*] Enable -z option [*] Enable -Z option [*] Enable support for old tar header format [*] Enable support for some GNU tar extensions [*] Enable long options 4)Linux Module Utilities选项,要使用可加载模块,下面配置要选上 Linux Module Utilities ---> [*] insmod [*] Module version checking [*] Add module symbols to kernel symbol table [*] In kernel memory optimization (uClinux only) [*] Enable load map (-m) option [*] Symbols in load map [*] rmmod [*] lsmod [*] Support version 2.6.x Linux kernels 5)Linux System Utilities选项,支持mdev,这可以方便构造/dev目录,并且可以支持热插拔设 备,并支持mount,unmount命令,并让mount命令支持NFS网络系统 Linux System Utilities ---> [*] mdev [*] Support /etc/mdev.conf [*] Support command execution at device addition/removal [*] mount [*] Support mounting NFS file systems [*] umount [*] umount -a option 6)Networking Utilities选项,增加ifconfig命令 Networking Utilities ---> [*] ifconfig [*] Enable status reporting output (+7k) [ ] Enable slip-specific options "keepalive" and "outfill" [ ] Enable options "mem_start","io_addr",and "irq" [*] Enable option "hw" (ether only) [*] Set the broadcast automatically 7)Miscellanous Utilities设置 Miscellanous Utilities ---> [ ] taskset 8)Runit Utllities设置 Runit Utllities ---> [ ] runsv 第三步,编译Busybox,先修改Makefile文件如下 175 ARCH ?= $(SUBARCH) 176 CROSS_COMPILE?= 修改为 175 ARCH ?= arm 176 CROSS_COMPILE?= arm-linux- 然后执行make编译Busybox 然后安装,先建如下目录/work/nfs_root/fs_mini,然后执行这个命令 $ make CONFIG_PREFIX=/work/nfs_root/fs_mini install 此时会在/work/nfs_root/fs_mini下生成bin,linuxrc,sbin,usr目录文件夹 第四步,添加glibc库,由于前面设置使用的是动态库,我们这里只需要加载器和动态库,操作如下 $ mkdir -p /work/nfs_root/fs_mini/lib $ cd /work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib $ cp *.so* /work/nfs_root/fs_mini/lib -d 第五步,构建根文件系统,主要是构建各个目录和相关文件的配置 1)构建etc目录,这里主要创建三个文件etc/inittab;etc/init.d/rcS;etc/fstab,init进程根 据/etc/inittab文件来创建其他子程序,比如调用脚本配置IP地址,挂载其他文件系统,最后启动 shell等 a)创建etc/inittab文件,在/work/nfs_root/fs_mini/etc的inittab文件如下 # /etc/inittab ::sysinit:/etc/init.d/rcS ttySAC0::askfirst:-/bin/sh ::ctrlaltdel:/sbin/reboot ::shutdown:/bin/umount -a -r b)创建etc/init.d/rcS文件,这是一个脚本文件,可以在里面添加自动执行命令,以下命令配置 IP地址,挂载/etc/fstab指定的文件系统 #!/bin/sh //运行时解析/bin/sh ifconfig eth0 192.168.1.17//用来配置IP地址 mount -a //挂载etc/fstab文件指定的所有文件系统 然后修改它的属性chmod +x etc/init.d/rcS c)创建etc/fstab文件,内容如下 # device mount-point type options dump fsck order proc /proc proc defaults 0 0 tmpfs /tmp tmpfs defaults 0 0 2)构建dev目录,有两种方式构建dev目录,一是静态创建设备文件,二是使用mdev创建设备文件,下 面使用静态创建设备文件 $ mkdir -p /work/nfs_root/fs_mini/dev $ cd /work/nfs_root/fs_mini/dev $ mknod console c 5 1 $ mknod null c 1 3 $ mknod ttySAC0 c 204 64 $ mknod mtdblock0 b 31 0 $ mknod mtdblock1 b 31 1 $ mknod mtdblock2 b 31 2 3)构建其他目录,比如proc,mnt,tmp,sys,root等 $ cd /work/nfs_root/fs_mini $ mkdir proc mnt tmp sys root 到这里,一个小的根文件系统就做好了,但要烧录到nand flash上,还要制作成yaffs或jffs2 文件镜像 第六步,制作yaffs文件镜像 1)解压yaffs压缩包,进入里面的yaffs2文件夹,拷贝mkyaffsimage工具至/usr/local/bin目录 下,然后执行下面命令生成镜像文件 $ cp mkyaffsimage /usr/local/bin $ chmod +x /usr/local/bin/mkyaffsimage $ cd /work/nfs_root $ mkyaffsimage fs_mini fs_mini.yaffs 在当前目录就生成了fs_mini.yaffs镜像文件 第七步,制作jffs2文件镜像 1)编译制作jffs2映象文件的工具,在网上下载mtd-utils-05.07.23.tar.bz2工具包和zlib压缩 包,进行解压和安装如下 $ tar xjf zlib-1.2.3.tar.gz $ cd zlib-1.2.3 $ ./configure --shared --prefix=/usr $ make $ make install 2)编译mkfs.jffs2 $ tar xjf mtd-utils-05.07.23.tar.bz2 $ cd mtd-utils-05.07.23/util $ make $ make install 3)制作jffs2映象文件 $ cd /work/nfs_root $ mkfs.jffs2 -n -s 512 -e 16KiB -d fs_mini -o fs_mini.jffs2 到这里,内核和根文件系统都制作好了,下节介绍如何烧录到板子上,如何设置参数自动启动
相关阅读 更多 +