上篇:CF卡分区, extlinux的安装

中篇:构建根文件系统

下篇:2.6内核剪裁及Busybox编译配置及其分析

一个基本的文件系统应该包括:

busybox (提供 shell 命令集)

设备文件(如果是用 devfs 的话这个就免了,arm中常见的创建方式还有mdev,udev)

配置文件(用来初始化和布局文件系统)

库文件(如果 busybox 是静态编译的话,就不需要busybox 的库文件,以及其他诸如qt、MiniGUI的库)。

之前的一篇日志, http://blog.csdn.net/dos5gw/archive/2010/08/20/5826054.aspx

也提到了使用busybox构建rootfs的方法, 建立根文件系统的步骤大致相同, 其中需要注意的差异在于dev的创建有3种方式:

方案1 手动创建: 使用mknod创建;

方案2 使用devfs: 已经过时;

方案3 使用udev(mdev): mdev是busybox自带的简化版的udev, udev(mdev)能根据目前的硬件设备(系统启动/热插拔/加载驱动)动态更新dev下的设备文件;

如果采用第1种手动创建的方式, 参考http://blog.chinaunix.net/u1/56388/showart_438741.html

如果采用第3种手动创建的方式, 参考http://huang-tomey.blog.163.com/blog/static/1247505732009916437175/ 以及

http://blog.vckbase.com/websurf/archive/2005/08/23/11386.aspx

(一)编译并安装busybox到CF卡:

busybox的配置, 详见: http://blog.csdn.net/dos5gw/archive/2010/10/26/5965992.aspx

进入busybox目录, 依次执行make menuconfig, make, make install

执行完make install后, 会生成busybox/_install目录

CF卡挂载到/mnt/cf: mount /dev/sdb1 /mnt/cf

拷贝busybox生成文件到CF卡: cp -arf _install/* /mnt/cf/


再创建必要的目录: (usr/sbin/, usr/bin/, bin/, sbin/已经在busybox/_install下生成):

mkdir root dev etc boot tmp var sys proc lib mnt home  

mkdir etc/init.d etc/rc.d etc/sysconfig  

mkdir  usr/lib usr/modules

chmod 1777 tmp

#mkdir var/lib var/lock var/run var/tmp

chmod 1777 var

(二)创建设备文件:

在busybox-1.13.3/examples/bootfloppy目录下能找到一些实用脚本, mkdevs.sh/ mkrootfs.sh, 还附有一个syslinux的配置文件例子; 下面依照mkdevs.sh脚本来手动创建dev:

cd /mnt/cf/dev

mknod console c 5 1
mknod full c 1 7
mknod kmem c 1 2
mknod mem c 1 1
mknod null c 1 3
mknod port c 1 4
mknod random c 1 8
mknod urandom c 1 9
mknod zero c 1 5

#mknod tty c 5 0
mknod ttyS0 c 4 64 
mknod ttyS1 c 4 65 
#mknod ttyS2 c 4 66 
#mknod ttyS3 c 4 67

格式解释: mknod 节点名 类型 主设备号 从设备号

b    :创建一个块(有缓存的)特殊设备文件。

c, u : 创建一个字符(无缓存的)特殊设备文件。

p    :创建FIFO文件。

(三)创建配置文件:

配置文件包括:

(1)/etc/inittab
init进程根据/etc/inittab文件来创建其他子进程,比如调用脚本文件配置ip地址、挂接其他文件系统,最后启动shell等,

参考busybox源码下面的“examples/inittab”文件,内容如下:


::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
tty2::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r

改变权限 chmod 755 inittab,

注意, 第二个例子中, 要确认dev/tty2节点存在.

console::askfirst:-/bin/sh, 在进入console之前, 要回车确认, 如果askfirst改为respawn, 则不必回车, 直接进入console;

(2)etc/init.d/rcS
这有点类似于Windows系统中的Autobat自动批处理文件,内容如下:

PATH=/sbin:/bin:/usr/sbin:/usr/bin

runlevel=S

prevlevel=N

umask 022

export PATH

echo "Entering  /etc/init.d/rcS..."

echo "      Reading /etc/fstab and mount"

/bin/mount -a

#echo "     Starting mdev"

#/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug

#mdev -s

# if use NFS, do not reconfigure IP address

#echo "     Set IP Address"

#/sbin/ifconfig lo 127.0.0.1

#/etc/init.d/ifconfig-eth0

#sleep 5

#echo "     mount -o remount,rw /"

#mount -o remount,rw /

echo "Exit /etc/init.d/rcS..."

改变权限 chmod 755 /nit.d/rcS

(3)/etc/fstab,对应mount -a,内容如下:

#device mount-point type options dump fsck order

proc   /proc proc  defaults 0 0

sysfs  /sys  sysfs defaults 0 0

tmpfs /tmp tmpfs size=16m,mode=1777 0 0

tmpfs /var  tmpfs size=16m,mode=1777 0 0

#none   /tmp  ramfs defaults 0 0

#mdev   /dev  ramfs defaults 0 0

或者:

改变权限chmod 755 fstab

(4)/etc/passwd和etc/group,内容如下:
#/etc/passwd
root::0:0:root:/root:/bin/sh
daemon::1:1:daemon:/usr/sbin:/bin/sh
bin::2:2:bin:/bin:/bin/sh
sys::3:3:sys:/dev:/bin/sh

#etc/group
root::0:root
daemon::1:
bin::2:
sys::3:
tty::5:

改变权限chmod 775 passwd group

(5)/etc/profile,内容如下:

echo "Entering /etc/profile... "
USER="id -un"
LOGNAME=$USER

/bin/hostname Test-3355
PS1='[/u@/h:/w]#'

echo "    Set search library path"
export LD_LIBRARY_PATH=/lib:/usr/lib

echo "    Set user path"

PATH=/sbin:/bin:/usr/sbin:/usr/bin
export USER LOGNAME PS1 PATH

echo "Exit /etc/profile... "

或者:
echo "Processing /etc/profile... "
/bin/hostname TEST2440
export LD_LIBRARY_PATH=/lib:/usr/lib
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/xrft
export PATH
PS1='[/u@/h/W]/$'

改变profile文件的执行权限: chmod 775 profile

注:PS1中,/w和/W分别是显示"绝对路径"和"相对路径"

(四)相关运行库文件:

用ldd可查看某apps依赖的库, 比如,查看某gcc -static编译的程序:

# ldd test3355
        not a dynamic executable

查看非static编译的程序:

# ldd test3355d
        linux-gate.so.1 =>  (0x0074a000)
        libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x00afb000)
        /lib/ld-linux.so.2 (0x00d50000)

另外. 用file命令可以查看程序的类型, 包括程序的平台, 格式, 动态/静态库等:

# file test3355d
test3355d: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped

//----------------------------------------------------------------

//----完成并测试------------------------------------------------

工控机开机, 可以正常启动, 并进入console, 但是发现不能更改/etc 下的文件, vi或者chmod修改文件时, 提示"file is read only" 或"read-only file system",,,原因不明

在/etc/init.d/rcS最后加入 mount -o remount,rw /

可以暂时解决;

后来找到的解决方法, extlinux(即bootloader)的配置参数原为"append noinitrd root=/dev/sda1 init=/linuxrc ide=nodma"

在root后面增加'rw', 可以去掉rcS脚本里的mount了!

//------------------------------------------------------------------------

//--------------------构建rootfs需要的改进, 及知识点补充---------

1. CramFS, Yaffs, JFFS的区别, MTD的概念

2. 基于ram的文件系统, tmpfs

在etc/rc.d中常有:

mount -t tmpfs tmpfs /var -o size=512k

mkdir -p /var/tmp

mkdir -p /var/log

或者mount -t ramfs none /mnt/ramfs -o maxsize=2000

或者在fstab中加入以下, mount -a时会挂载:

tmpfs /var tmpfs size=32m 0 0

//-----------fstab解读-----------

  从做到右:

  #/dev/device  mount-point   type   rules         dump   fsck

tmpfs          /var                tmpfs size=32m  0          0

  1. /dev/device: 不用说了吧?例如,/dev/hda1 为M$-Win9x下的c:盘。

  2. mount-point: 挂载点。例如,把/dev/hda1挂到/mnt/mywinc下。

  3. type: ext3, vfat, ......就是要挂上的文件系统类型。

  4. rules:

   auto: 开机自动挂接;

   default, noauto: 开机不自动挂接;

   nouser: 只有root可挂;

   ro: 只读挂接;

   rw: 可读可写挂接;

   user: 任何用户都可以挂接;

  5. dump: 备份;0为从不备份,或显示上次至今备份之天数;

  6. fsck: 启动时fsck检查顺序,0为不检查, “/”永远为1;

#device mount-point type options dump fsck order

proc   /proc proc  defaults 0 0

sysfs  /sys  sysfs defaults 0 0

tmpfs /tmp tmpfs size=16m,mode=1777 0 0

none  /var  ramfs defaults 0 0

#none   /tmp  ramfs defaults 0 0

#mdev   /dev  ramfs defaults 0 0

# /etc/inittab

# example

# id:runlevel:action:process

::sysinit:/etc/init.d/rcS

console::respawn:-/bin/sh

#console::askfirst:-/bin/sh

#::respawn:/sbin/getty  38400  tty1

::ctrlaltdel:/sbin/reboot

::shutdown:/bin/umount -a -r

[原创] 利用busybox, extlinux 在工控机CompactFlash(CF卡)上构建Linux系统(中)相关推荐

  1. [原创] 利用busybox, extlinux 在工控机CompactFlash(CF卡)上构建Linux系统(上)

    上篇:CF卡分区, extlinux的安装 中篇:构建根文件系统 下篇:2.6内核剪裁及Busybox编译配置及其分析 硬件平台:研华3355 软件:busybox-1.13.3, extlinux ...

  2. 利用busybox, extlinux 在工控机CompactFlash(CF卡)上构建Linux系统(下)

    < 工控机 (AMD LX处理器平台, 非ARM) Linux kernel & Busybox 编译选项配置 > (一) 配置并编译Busybox: 说明, 此次编译的目标机不是 ...

  3. linux cf卡格式,CF卡上的Linux启动过程分析

    一个嵌入式linux操作系统可以简单的抽象为,引导程序bootloader.内核vmlinuz.文件系统filesystem. Bootloader是系统加电后运行的第一段代码,一般它只在启动系统时非 ...

  4. 详解基于busybox、dropbear、ngnix制作完整的嵌入式Linux系统

    说明:         <一>:查看此博文,建议查看笔者上一篇博文(Linux启动过程),因为只有在完全了解Linux系统启动流程及一些配置文件的相关性,在阅读此博文才能有思路,理解起来更 ...

  5. 在CF卡上建立文件系统和安装引导加载程序

    CF卡在嵌入式工控领域越来越多的被应用,如何在CF卡上构建嵌入式linux是开发中一个基础但非常重要的过程! 本文介绍在CF卡上建立用于PC104板卡上的根文件系统,着重介绍了针对CF卡的操作,至于具 ...

  6. linux卸载cf卡命令,嵌入式Linux 中CF卡的驱动和管理技术研究

    在嵌入式Linux系统中,为了在没有PCMCIA控制器的情况下仍然要利用CompactFlash存储卡(简称CF卡)作为存储设备,作者从CF卡的硬件特性入手,在系统层基于CF卡的memory寻址访问方 ...

  7. linux 已打开文件图标管理,Linux_没有启动图标利用Linux命令在终端打开文件,  在Linux系统中,打开一个 - phpStudy...

    没有启动图标利用Linux命令在终端打开文件 在Linux系统中,打开一个文件很简单,只要有启动图标就可以了,但是如果没有启动图标的话要如何在终端下打开文件呢?使用命令就能很好的解决这个问题,下面小编 ...

  8. 在CF卡上实现TrueFFS

    CF卡是一种基于Flash技术的容量大.携带方便的存储介质,已在嵌入式系统等领域得到广泛的应用:但是,有限的擦写次数极大地限制了CF卡的使用寿命.TrueFFS通过一系列算法,能够延长CF卡的使用寿命 ...

  9. 研华工控机linux改win7,嵌入式工控机研华工控机用u盘装系统如何设置bios?在虚拟机中的Linux系统中咋挂u盘 我的虚拟机上都没有USB 显示5...

    研华工控机用u盘装系统如何设置bios?在虚拟机中的Linux系统中咋挂u盘 我的虚拟机上都没有USB 显示5 在上一篇文章中,小编为您详细介绍了关于<有一个研祥工控机 旧的 想拆里面的视频采集 ...

最新文章

  1. SpringCloud Eureka Client和Server侧配置及Eureka高可用配置
  2. 2021年计算机专业工作规划,2021年小学电脑室工作计划
  3. java中session源码_Spring Session原理及源码分析
  4. mpc 安全多方计算协议_HashKey:说透安全多方计算 MPC 技术方案、挑战与未来
  5. AWT_Swing_单选框(Java)
  6. python中break continue exit() pass区别
  7. windows安装MobaXterm
  8. C++11中智能指针的原理、使用、实现
  9. 【JY】YJK前处理参数详解及常见问题分析(六):地震信息
  10. CISSP备考大全(完整版)
  11. 野蛮人传教士问题(上)
  12. ArcGIS遇到严重的应用程序错误的解决办法
  13. 随着员工转为远程办公,Diligent在所有董事会管理平台中提供无缝视频会议接入,确保安全的虚拟董事会议
  14. 计算机台式硬件排名价格,台式机电脑主板排名
  15. 写专利的一点小小心得
  16. app分发源码完整­­|免签封装
  17. 多个pdf文件如何合并为一个文件?怎样将多个pdf文件合并到一个文件?
  18. 【机器学习|数学基础】Mathematics for Machine Learning系列之矩阵理论(14):向量范数及其性质
  19. 无线连接世界 创新驱动中国 《微波射频技术》杂志发布
  20. pixel一代升级android10,谷歌Pixel系列首次Android 10更新:我们都应该知道些什么

热门文章

  1. k型热电偶材料_k型热电偶补偿导线材质
  2. 【B站弹幕游戏开发笔记01】Win10系统下给Unity项目导入Protobuf
  3. Lacrimosa全集纳米盘下载(22CD1DVD)[APE]
  4. 模糊图片处理(行车记录仪、监控等)
  5. 西门子、福特、三菱汽车、苹果、沃博联、瑞幸等公司高管变动
  6. 机器人工程毕业设计☞开源学习(扫地)
  7. 复数在初等平面几何问题中的应用案例
  8. 求职秘籍-简历制作?
  9. 物联网传输协议总结笔记
  10. Matlab学习——滑块曲线生成APP设计