百度空间 | 百度首页 
               
 
查看文章
 
ln -s
2007-09-02 13:57
为了创建一个符号链接,输入:

ln -s /tmp/toc toc

这会在当前的目录中创建符号链接 toctoc 文件指向 /tmp/toc 文件。如果 /tmp/toc 文件已经存在了,那么 cat toc 命令可以列出其内容。

如果想要在不指明 TargetFile 参数的情况下得到相同的结果,请输入:

ln -s /tmp/toc

5 创建linuxrc文件
内容
如下:
$ vim rootfs/linuxrc
#!/bin/sh

echo "Hello linux ,gggggg"
exec /sbin/init
然后修改权限:chmod 775 linuxrc

1)        制作必须的文件夹及设备文件

        #mkdir rootfs

        #cd rootfs

        #mkdir bin dev etc lib mnt proc sbin sys root

        #mkdir /etc/var

        #mkdir /etc/tmp

        #ln –s /etc/var /var

        #ln –s /etc/tmp /tmp

Linux-2.6.18开始,负责旧版本的设备管理系统devfs已被废除,但新版本的udev是一个基于用户空间的设备管理系统。在内核启动时并不能自动创建设备节点,固需手动创建consolenull两个启动过程必须的设备节点。

        #mknod -m 660 dev/console c 5 1

        #mknod -m 660 dev/null c 1 3

        #touch linuxrc

拷贝经过交叉编译的库文件,参数-d,保持库文件的链接关系。进入rootfs/lib目录下,执行下面命令:

        #cp -rfd /usr/local/arm/3.4.1/arm-linux/lib/* ./

注:/usr/local/arm/3.4.1/ 为交叉编译工具链的存放目录,如果是网上下载的交叉编译工具链,必须将其存放在该目录或建立相应的软链接。

2)        交叉编译BusyBox

下载最新的稳定版的 BusyBox 1.4.1 (stable),解压缩tar zxf busybox1.4.1.tar,解压后修改Makefile,指明交叉编译器:

        ARCH            ?= arm

        CROSS_COMPILE   ?= /usr/local/arm/3.4.1/bin/arm-linux-

在解压后的BusyBox 1.4.1目录里执行 make menuconfig ,选择系统需要用到的命令或工具。值得注意的是 shell 的选择,在 Choose your default shell (none) 这一项回车后选择 ash , 否则, 编译后会提示找不到shell,使系统无法启动。如下:

Starting pid 739, console /dev/console: '/bin/sh'

sh: applet not found

Process '-/bin/sh' (pid 739) exited.  Scheduling it for restart.

执行 make install进行编译,编译完后,会出现_install目录,包含binsbindusr三个目录和一个linuxrc文件。Linuxrclinux启动后第一执行的文件(由u-boot传给linux的启动参数决定),其作用是执行相应的初始化工作。但u-boot编译生成的仅是一个指向/bin/busybox的链接文件。由于我们需要作一些初始化工作,如启动web服务器,加载特定驱动程序等,我们将自行编写linuxrc这个文件。binsbindusr这三个目录里除了bin/busybox一个文件外,其余都是指向busybox的链接文件。我们将binsbindusr这三个目录拷贝到rootfs的相应目录,基本的文件系统制作完成。

如果找不到Linuxrc文件,可以自建一个:

ln -s /arm/busybox linuxrc

3)        生成镜像文件

因为这个文件系统是存放在开发版的nand flash中,还需经先转换为jffs2镜像文件,再通过u-boot烧写进nand flash(mkfs.jffs2文件需要复制到与rootfs同目录下)

              ./mkfs.jffs2 -d rootfs -p -s 0x200 -e 0x4000 -n -l -U -o rootfs.img

-d 指定待转换的目录,-p 指定将所有的已擦除但未使用的块填充为0xFF-s 设定页的大小为528字节,-e 设定擦除块的大小为16KB-n 指明不添加清楚标记(nand flash 有自己的校检块,存放相关的信息。),-l 指定使用小端格式,-U 将所有文件的拥有者设为root用户,最后-o 指明输出的镜像文件名。生成的rootfs.img可通过u-boot直接烧写至nand flash

              nand erase 0x200000 0x3e00000

tftp 0x30000000 rootfs.img

nand write.jffs2 0x200000 $(filesize)

要想使用jffs2文件系统作为根文件系统,还需给linux传入以下参数: root=/dev/mtdblock1 rw rootfstype=jffs2 ,可以通过设定u-bootbootargs完成这项工作。

              setenv bootargs root=/dev/mtdblock1 rw rootfstype=jffs2 noinitrd init=/linuxrc console=ttySAC0,115200

暂时转载,未来行及标明出处,等开发完成再改,请作者谅解

首先你要看懂这个linuxrc,
1. /bin/mount -n -t ramfs ramfs /etc  

这句话的作用加载一个ramfs作为/etc目录。这样/etc就是一个可写目录。
看这个脚本,得出你的根文件系统是一个cramfs,是一个只读文件系统中,而/etc作为系统运行配置文件的存放地点,可能会写一些运行状态在这里, linuxrc第一件事情就是将一个ramfs mount 到/etc只读目录中,使得/etc/目录可写,指定参数 -n的目的是告诉mount不要写/etc/mtab, 这个文件存放当前系统mount了的所有文件系统中。 因为现在/etc/目录还是只读,所以这次mount不要写这个文件,否则会失败。

而你问到的 ramfs在哪里,这个在你的 /etc/fstab文件中应该有ramfs一项, mount 会去找这项,如果没有,mount会失败。后面就执行不下去。

2. /bin/cp -a /mnt/etc/* /etc
/etc成为可写目录后,将所有/mnt/etc中的配置文件拷贝到/etc/中,这说明你的ramfs可能是一个空的ramfs,没有配置文件,或者配置文件比较老。 同时也说明你这个系统是一个只读系统,每次系统运行中写入的配置不会保留。

将以前mount的那些信息重新写到/etc/mtab中,命令就是下面这些。
3. /bin/mount -f -t cramfs -o remount,ro /dev/bon/2 /
/bin/mount -f -t ramfs ramfs /etc

这些命令只是将这些mount信息写到/etc/mtab中,不会实际去mount这些block device,说明你的根文件系统依然是以前的那个/dev/bon/2

4. exec /sbin/init
执行根文件系统中的init执行程序,使其成为1号进程。shell正式运行。


你的shell运行不起来,可能是因为/etc/fstab有问题,注意看一下你的cramfs中的这个文件内容是否正确。
脚本不全,无法做出更进一步判断。最好把你的脚本和cramfs中的文件结构贴出来


---------------------------------------------


一个完整的cramfs文件系统通常包含以下几个目录:

/linuxrc 启动脚本文件,由Boot Loader核心命令行确定init=/linuxrc,加载/etc目录为ramfs,(cramfs为只读文件系统),拷贝/mnt/etc到 /etc,配置文件目录重新加载根文件系统和/etc文件系统,执行init进程。

/bin    引导启动所需的命令或用户可能用的命令。

/sbin 系统管理员服务程序,其中最重要的是供内核初始化之后执行的/sbin/init进程,系统启动时由init解释并运行/etc/inittab, inittab将指导int去调用一个系统初始化程序/etc/init.d/rcS。

/etc    特定机器的配置文件以及用户数据存放目录,其中的所有内容是在内核运行后,由linuxrc 从/mnt/etc拷贝得到的。

/lib    文件系统上的程序所需的动态库。

/dev 驱动程序存放目录,可以在这里存放自己编写的驱动程序。

/usr 用于存放用户程序和配置文件的目录,可以根据需要进行设置。目录下的/usr/etc/rc.local执行本地所需要的初始化,如安装核心模块,进行网络,运行应用程序,启动图形界面等。/etc/modules.conf在系统运行期间自动加载模块。

/mnt 用于设备安装的目录。/mnt/etc/init.d/rcS完成各个文件系统的Mount,执行/usr/etc/rc.local;通过rcS可以调动dhcp程序配置网络。rcS执行完以后,就会打开Shell。

/proc 系统状态文件目录, 目录中的文件可以用于访问有关内核的状态、计算机的属性、正在运行的进程的状态等信息。尽管 /proc 中的文件是虚拟的,但它们仍可以使用任何文件编辑器或像'more', 'less'或 'cat'这样的程序来查看。

四、 Cramfs文件系统的移植过程

文 件系统是紧跟uCLinux内核放置,由内核加载,主要存放用户应用程序和配置信息。CramFS文件系统的基本组成:初始化程序、Shell程 序以及其他Linux常用工具、配置文件、链接库、图形界面程序和用户应用程序等。本节将介绍移植CramFS文件系统的具体操作方法。

4.1、在内核中加入对CramFS文件系统支持

想要在系统中提供CramFS的能力,我们必须要在编辑uCliunx内核时把支持CramFS的选项加入。尽管uCLinux可以以模块的形式加载各种类型的设备驱动上,但我们选择直接把设备驱动及CramFS文件系统静态地编译进内核中。

在Memory Technology Devices (MTD)选项中进行配置:

Memory Technology Device (MTD) support[Y/m/n/?] Y    内存技术设备支持

MTD partitioning support [Y/m/n/?] Y 支持MTD分区

Direct char device access to MTD devices[Y/m/n/?] Y MTD字符设备直接访问

Caching block device access to MTD devices[Y/m/n/?] Y MTD块设备缓冲访问

在File Systems选项中进行配置:

Compressed ROM file system support [Y/m/n/?] Y    ROM文件系统的支持

完成上述修改并编译后,完成uCliunx内核对CramFS文件系统的支持。

4.2、 拷贝需要加入的其他文件和链接

(1)、 Busybox 是 Debian GNU/Linux 的大名鼎鼎的 Bruce Perens 首先开发的。Busybox 编译出一个单个的独立执行程序,就叫做 busybox。但是它可以根据配置,执行 ash shell的功能,以及几十个各种小应用程序的功能。这其中包括有一个迷你的vi编辑器,系统不可或缺的/sbin/init程序,以及其他诸如 ifconfig, halt, reboot, mkdir, mount, ln, ls, echo, cat等等。而所有这一切功能却只有区区1M左右的大小,Busybox已经成为构建嵌入式Linux文件系统的必备软件。

     首先我们从官方网站(http://www.busybox.org/)上下载BusyBox 的版本1.0.0。

#tar xvfz busybox-1.00.tar.gz
#cd busybox-1.00
#make menuconfig

下面是需要编译进busybox的功能选项,其他的可以根据需要自选。

Build Options
[*] Build BusyBox as a static binary (no shared libs)

这个选项是一定要选择的,这样才能把busybox编译成静态链接的可执行文件,运行时才独立于其他函数库,否则必需要其他库文件才能运行,在单个linux内核不能使他正常工作。
    [*] Do you want to build BusyBox with a Cross Compiler   
选择你自己定义的交叉编译环境。

Installation Options
[*] don’t use /usr

这个选项也一定要选,否则make install 后busybox将安装在原系统的/usr下,这将覆盖系统原有的命令。选择这个选项后,make install后会在busybox目录下生成一个叫_install的目录,里面有busybox和指向他的链接。

其 他选项都是一些linux基本命令选项,自己需要哪些命令就编译进去,一般用默认的就可以了,配置好后退出并保存。编译BusyBox,如果能成 功编译BusyBox,就将编译好的busybox 复制到CramFS文件系统的/bin 目录下,然后创建常用命令的建立快捷方式。建立快捷方式很简单,只要建一个符号链接,比方ln -s /bin/busybox /bin/ls,那么,执行/bin/ls的时候,busybox 就会执行ls的功能,也会按照ls的方式处理命令行参数。

(2)、拷贝一些管理员控制程序到/sbin目录下,最重要的就是要包含一个init命令,可以使用busybox提供的系统工具。比如 ln -s /bin/busybox /sbin/init,这样我们就有了系统运行不可或缺的 /sbin/init 程序了。

       (3)、 拷贝应用程序运行时所需要的库到/lib,库文件可以从PC机上的交叉编译工具安装目录下拷贝,如libc- 2.2.2.so、libcryt-2.2.2.so、libm-2.2.2.so、libutil-2.2.2.so等,为部分相应库建立快捷方式,提 供一些应用程序按快捷方式名称调用。值得注意的是C库要采用C库的版本glibc, glibc位于/lib/libc.so.6。

4.3 、利用mkcramfs工具生成cramfs压缩文件系统

一般情况下都要把已经规划好的目录结构转换成一个映象文件,创建Cramfs文件系统需要mkcramfs工具,mkcramfs能把相应的Cramfs目录树压缩成为单一的映象文件,这个映象文件就是我们需要移植的文件系统。Mkcramfs的命令格式为:

Mkcramfs [-h] [--e edition] [-I file] [-n name] DirName     OutFile

#mkcramfs    root    cramfs.Img


tar xvjf XXX.bz2解包
tar xvzf xxx.gz
tar zcvf xxx.bz2/gz xxx 压缩

 

类别:默认分类 | 添加到搜藏 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu