someday

someday

0个粉丝

16

问答

0

专栏

12

资料

someday  发布于  2009-06-26 08:48:33
采纳率 0%
16个问答
3649

构建基本的嵌入式Linux根文件系统

其实在去年8月份我做系统移植时就构建好了一个可以用的根文件系统,但是那时是跟着别人的《Linux全线移植文档》做的。有些东西我也不清楚,只是跟着做,做出来能用就了事了,没有深究其中的规范,以及文件系统中哪些要,哪些不要。

趁着今年过年的几天假期,我移植重新移植了U-Boot1.3.1和Linux2.6.24到S3C2410及S3C2440后,我想好好的看看有关文件系统构建方法和规范,整理整理构建根文件系统的文档。之后,我用了近一周的时间,慢慢研究《构建嵌入式Linux系统》这本书有关根文件系统的部分,以及一些网上的参考资料,不断地实验。构建好了一个精简的根文件系统,下面我只介绍构建的过程和方法,至于原理我给出以下参考资料,自己看吧。

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

1、 《Linux系统移植》:一个经典的Linux移植文档,共有95页的PDF文档,内容十分详细,里面有根文件系统的创建,还多地方都有下载(有的网站称之为《Linux系统全线移植文档》等等),很值得参考。在这里感谢文档的作者们。
2、 《构建嵌入式Linux系统》必看!里面对文件系统的构建讲的挺细。
3、 《Filesystem Hierarchy Standard》Linux文件系统的标准规范。我只看到英文的。
其他再遇到不懂的就google,基本上都是Linux的相关知识,都是找得到的。

--------------------------------------------------------------------------------
(1)创建根文件系统的基本目录结构。
我把这个过程做成了shell脚本,很方便! #! /bin/sh
    echo "creatint rootfs dir......"
    mkdir rootfs
    cd rootfs

    echo "making dir : bin dev etc lib proc sbin sys usr"
    mkdir bin dev etc lib proc sbin sys usr #必备的8个目录
    mkdir usr/bin usr/lib usr/sbin lib/modules

# Don't use mknod ,unless you run this Script as root !
# mknod -m 600 dev/console c 5 1
# mknod -m 666 dev/null c 1 3

    echo "making dir : mnt tmp var"
    mkdir mnt tmp var
    chmod 1777 tmp
    mkdir mnt/etc mnt/jffs2 mnt/yaffs mnt/data mnt/temp
    mkdir var/lib var/lock var/log var/run var/tmp
    chmod 1777 var/tmp

    echo "making dir : home root boot"
    mkdir home root boot

    echo "done"

在你想要建立根文件系统的地方,运行: [tekkamanninja@Tekkaman-Ninja nfs]$ ./mkroot
creatint rootfs dir......
making dir : bin dev etc lib proc sbin sys usr
making dir : mnt tmp var
making dir : home root boot
done
[tekkamanninja@Tekkaman-Ninja nfs]$ cd rootfs/dev/
[tekkamanninja@Tekkaman-Ninja dev]$ su
口令:
[root@Tekkaman-Ninja dev]# mknod -m 600 console c 5 1;mknod -m 666 null c 1 3;exit
exit
[tekkamanninja@Tekkaman-Ninja dev]$

--------------------------------------------------------------------------------
(2)配置、编译和安装Busybox-1.9.1

[tekkamanninja@Tekkaman-Ninja source]$ tar -xjvf busybox-1.9.1.tar.bz2

修改Makefile文件: [tekkamanninja@Tekkaman-Ninja busybox-1.9.1]$ pwd
/home/tekkamanninja/working/source/busybox-1.9.1
[tekkamanninja@Tekkaman-Ninja busybox-1.9.1]$ kwrite Makefile

......(第151-154行)
#SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
#                 -e s/arm.*/arm/ -e s/sa110/arm/ \
#                 -e s/s390x/s390/ -e s/parisc64/parisc/ \
#                 -e s/ppc.*/powerpc/ -e s/mips.*/mips/ )
......(第174行附近)
#ARCH        ?= $(SUBARCH)
#CROSS_COMPILE    ?=
ARCH         = arm
CROSS_COMPILE = /home/tekkamanninja/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-
[tekkamanninja@Tekkaman-Ninja busybox-1.9.1]$ make menuconfig

在原有的基础上修改如下:



Busybox Settings --->
      Installation Options --->
           
  • Don't use /usr
               (/home/tekkamanninja/working/nfs/rootfs) BusyBox installation prefix
            Busybox Library Tuning  --->
               
  • Support for /etc/networks
               
  •    Additional editing keys     
               
  •    vi-style line editing commands   
               (15)  History size  
               
  •    History saving  
               
  •    Tab completion
               
  •      Username completion  
               
  •    Fancy shell prompts
    Login/Password Management Utilities  --->选项全部N掉,后面单独使用TinyLogin。(因为集成的好像不是很好用,我自己的经验是这样)
    Linux Module Utilities  --->  
          [N] Support version 2.2.x to 2.4.x Linux kernels
    Shells  --->
          ---   Ash Shell Options 下的选项全选
    [tekkamanninja@Tekkaman-Ninja busybox-1.9.1]$ make
    ......
      LINK busybox_unstripped
    Trying libraries: crypt m
    Library crypt is needed
    Library m is needed
    Final link with: crypt m
    [tekkamanninja@Tekkaman-Ninja busybox-1.9.1]$ make install

    我是动态编译所以查看一下需要的动态库

    [tekkamanninja@Tekkaman-Ninja busybox-1.9.1]$ /home/tekkamanninja/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-readelf -d busybox

    Dynamic section at offset 0xac014 contains 22 entries:
      Tag Type Name/Value
    0x00000001 (NEEDED) Shared library: [libcrypt.so.1]
    0x00000001 (NEEDED) Shared library: [libm.so.6]
    0x00000001 (NEEDED) Shared library: [libc.so.6]
    0x0000000c (INIT) 0xc0f0
    0x0000000d (FINI) 0x97608
    0x00000004 (HASH) 0x80e8
    0x00000005 (STRTAB) 0xa3c0
    0x00000006 (SYMTAB) 0x8b30
    0x0000000a (STRSZ) 3371 (bytes)
    0x0000000b (SYMENT) 16 (bytes)
    0x00000015 (DEBUG) 0x0
    0x00000003 (PLTGOT) 0xbc0ec
    0x00000002 (PLTRELSZ) 2976 (bytes)
    0x00000014 (PLTREL) REL
    0x00000017 (JMPREL) 0xb550
    0x00000011 (REL) 0xb4e0
    0x00000012 (RELSZ) 112 (bytes)
    0x00000013 (RELENT) 8 (bytes)
    0x6ffffffe (VERNEED) 0xb400
    0x6fffffff (VERNEEDNUM) 3
    0x6ffffff0 (VERSYM) 0xb0ec
    0x00000000 (NULL) 0x0

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

    (3)修改和创建必要的文件。

    [tekkamanninja@Tekkaman-Ninja busybox-1.9.1]$ cp -a examples/bootfloppy/etc/* /home/tekkamanninja/working/nfs/rootfs/etc/

    [tekkamanninja@Tekkaman-Ninja busybox-1.9.1]$ cd ../../nfs/rootfs/etc/

    1、增加为SHELL导入全局变量的文件/etc/profile
    [tekkamanninja@Tekkaman-Ninja etc]$ kwrite profile
      # /etc/profile: system-wide .profile file for the Bourne shells
    echo

    echo "Processing /etc/profile... "
    # no-op

    # Set search library path
    echo "Set search library path in /etc/profile"
    export LD_LIBRARY_PATH=/lib:/usr/lib

    # Set user path
    echo "Set user path in /etc/profile"
    PATH=/bin:/sbin:/usr/bin:/usr/sbin
    export PATH

    # Set PS1
    #注意:ash 除了SHELL变量外,支持\u、\h、\W、\$、\!、\n、\w 、\nnn(ASCII字符对应的八进制数)
    完整版 请下载
    [hide=5]下载连接[/hide]
  • 易百纳技术社区文件: 构建基本的嵌入式Linux根文件系统.rar
    下载
    我来回答
    回答4个
    时间排序
    认可量排序

    药导

    0个粉丝

    23

    问答

    0

    专栏

    11

    资料

    药导 2016-07-12 14:12:51
    认可0
    好东西,谢谢楼主分享

    k_ewell

    0个粉丝

    1

    问答

    0

    专栏

    0

    资料

    k_ewell 2016-08-17 16:54:05
    认可0

    好东西,谢谢楼主分享

    Benz

    0个粉丝

    29

    问答

    0

    专栏

    0

    资料

    Benz 2016-11-21 20:47:35
    认可0
    好东西,谢谢

    godlovesummer

    0个粉丝

    0

    问答

    0

    专栏

    0

    资料

    godlovesummer 2016-07-11 10:24:03
    认可0
    学习一下
    :):):):):):):):):)
    或将文件直接拖到这里
    悬赏:
    E币
    网盘
    * 网盘链接:
    * 提取码:
    悬赏:
    E币

    Markdown 语法

    • 加粗**内容**
    • 斜体*内容*
    • 删除线~~内容~~
    • 引用> 引用内容
    • 代码`代码`
    • 代码块```编程语言↵代码```
    • 链接[链接标题](url)
    • 无序列表- 内容
    • 有序列表1. 内容
    • 缩进内容
    • 图片![alt](url)
    + 添加网盘链接/附件

    Markdown 语法

    • 加粗**内容**
    • 斜体*内容*
    • 删除线~~内容~~
    • 引用> 引用内容
    • 代码`代码`
    • 代码块```编程语言↵代码```
    • 链接[链接标题](url)
    • 无序列表- 内容
    • 有序列表1. 内容
    • 缩进内容
    • 图片![alt](url)
    相关问答
    无更多相似问答 去提问
    举报反馈

    举报类型

    • 内容涉黄/赌/毒
    • 内容侵权/抄袭
    • 政治相关
    • 涉嫌广告
    • 侮辱谩骂
    • 其他

    详细说明

    易百纳技术社区