免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1618 | 回复: 0
打印 上一主题 下一主题

制作跟文件系统(转自 jiajingtao126 网友的 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-27 17:13 |只看该作者 |倒序浏览
http://blog.sina.com.cn/s/blog_5fe42fc90100cp4z.html###
移植yaffs2文件系统到mini2440 嵌入式 yaffs2文件系统的移植2009-05-06
09:07用了近两个晚上的时间才把它搞定。昨晚成功移植后总结了下笔记,希望对初学该方面的朋友有帮助。
希望大家多多交流讨论共同进步。
一.使内核支持yaffs2文件系统
1. 获取yaffs 源码
http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/
2.在内核中添加对yaffs 的支持
解压yaffs源码进到yaffs2 的目录下执行:
#./patch-ker.sh c /opt/FriendlyARM/mini2440/linux-2.6.25.8/
此时到内核源码的“fs/”目录下面您将看到新添加了一个名为“yaffs2”的目录,同时fs/目录下面的Makefile
文件和Kconfig 文件也添加了yaffs2 的配置和编译条件。
如下所示:(
1)修改内核fs/Kconfig 增加一行:source "fs/yaffs2/Kconfig"
(2)修改内核fs/Makefile 增加一行ojb-$(CONFIG_YAFFS_FS) +=yaffs2/
(3)在内核fs/目录下创建yaffs2目录
将yaffs2源码目录下面的Makefile.kernel文件复制为内核fs/yaffs2/Makefie;
  将yaffs2
源码目录的Kconfig文件复制到内核fs/yaffs2目录下; 将yaffs2源码目录下的*.c
*.h文件复制到内核fs/yaffs2目录下.
)
3. 在配置单中添加对yaffs 的支持
在命令行输入:make menuconfig,进入配置单,然后配置如下所示:
File systems --->
Kernel automounter support
Kernel automounter version 4
support (also supports v3)
Filesystem in Userspace
support
CD-ROM/DVD Filesystems --->
ISO 9660 CDROM file system
support
DOS/FAT/NT Filesystems --->
MSDOS fs support
VFAT (Windows-95) fs
support
(437) Default codepage for FAT
(iso8859-1) Default iocharset for FAT
Pseudo filesystems --->
  • Virtual memory file system support (former shm fs)
  • Tmpfs POSIX Access Control Lists
    Userspace-driven configuration
    filesystem
    Miscellaneous filesystems --->
    YAFFS2 file system support
    -*- 512 byte / page devices
  • Lets Yaffs do its own ECC
    -*- 2048 byte (or larger) / page devices
  • Disable lazy loading
  • Turn off wide tnodes
  • Force chunk erase check
    -*- Native language support --->
    --- Native language support
    (iso8859-1) Default NLS Option
    Codepage 437 (United States,
    Canada)
    Simplified Chinese charset
    (CP936, GB2312)
    NLS ISO 8859-1 (Latin 1; Western
    European Languages)
    NLS UTF-8
    配置好之后,保存,编译出镜像。
    到此已以把yaffs 文件系统移植完毕了.
    二.制做文件系统
    1. 获取BusyBox 源码
    http://www.busybox.net/downloads/
    我用的是busybox-1.13.0.tar.bz2 。
    2 修改并配置BusyBox
    解压busybox,使用命令#tar jxvf busybox-1.13.0.tar.bz2 –C
    /opt/FriendlyARM/mini2440/
    然后进到源码中,修改Makefile 文件
    ARCH ? =arm
    CROSS_COMPILE ?=/usr/local/arm/3.4.5/bin/arm-linux-
    然后输入:#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
    然后退回到根配置单,选择“Save Configuration to an Alternate
    File”选项,保存刚刚的配置为
    mini2440busy_config(自己随便取的名字),编译时调用的是.config文件.
    3 .编译并安装BusyBox
    在命令行输入:make;make
    install,编译结束后会在busybox-1.13.0  
    根目录下面生成一个名为“_install”的目录。
    完成busybox 的编译之后,我们就可以进行文件系统的构建了。
    在“/opt/
    FriendlyARM/mini2440/”目录下面建立一个“root_2.6.25fs”的目录,复制刚刚编译出来的busybox
    的“bin”
    目录、“sbin”目录、“usr”目录和“linuxrc”到“root_2.6.25fs”目录下,然后新建“dev”、“etc”、“home”、
    “lib”、“mnt”、“opt”、“proc”、“root”、“sys”、“tmp”、“var”和“web”目录,并在原有的“usr”目录下面
    新建一个“lib”目录。
    4. 添加内容
    “dev”目录
    下面的内容在内核挂载完毕文件系统后,系统会使用mdev 自动建立。
    不过mdev 是调用init 进程来启动的,在使用mdev 构建“dev”目录前,init
    进程需要用到“/dev/console”和“/dev/null”这两个设备文件,所以,我们需要在制作文件系统时静态创建这两个设备文件,方法如下:
    #mknod console c 5 1
    #mknod null c 1 3
    如果不创建这两个设备文件,在文件系统启动时会出现错误信息.大概是不能初始化控制台。
    “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”的文件,该文件内容为:
    Embed_jiajintao,这句话就是我们在文件系统里面看到那个“[root@ Embed_jiajintao /]” 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:jiajintao
    501:x:501:jiajintao
    【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:/:
    jiajintao:$1$8GIZx6d9$L2ctqdXbYDzkbxNURpE4z/:502:502:Linux
    User,,,:/home/jiajintao:/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】:
    Embed_jiajintao
    “home”目录
    存放用户文件的目录,在这里,我建立了一个名为“jiajintao”的目录,前面的passwd
    文里面有个用户名就是对应jiajintao这个目录
    “lib”目录
    常用的库文件,获取库文件的方法:
    #cp -f /usr/local/arm/3.4.5/arm-linux/lib/*so* lib –a
    这里拷贝了常用的库文件,如果需要特殊的库,需要再从相应的位置复制过来。
    “mnt”目录
    我们一般用来挂载的U 盘之类的外设,这里建立两个目录“udisk”和“sd”,分别用来挂载U 盘和SD卡。
    “opt”目录

    “proc”目录
    提供一些目录和虚拟文件系统。
    “root”目录
    超级用户的目录。
    “sys”目录
    “tmp”目录
    存放临时文件的目录。
    “var”目录
    存放临时文件的目录。
    “web”目录
    存放web 服务器的相关文件的目录,建议直接从以前制做好的文件系统中拷贝过来。
    到此,文件系统的框架就基本搭好了,然后把它做出yaffs 文件系统格式的镜像就可以使用了。使用如下命令制作:
    #mkyaffsimage_2 root_2.6.25.8/ root_yaffs2.img
    烧到开发板里,启动信息如下:
    VIVI version 0.1.4 (root@capcross) (gcc version 2.95.3 20010315
    (release)) #0.1.4 Mon Oct 27 10:18:15 CST 2008
    MMU table base address = 0x33DFC000
    Succeed memory mapping.
    DIVN_UPLL0
    MPLLVal [M:7fh,P:2h,S:1h]
    CLKDIVN:5h
    +---------------------------------------------+
    | S3C2440A USB Downloader ver R0.03 2004 Jan |
    +---------------------------------------------+
    USB: IN_ENDPOINT:1 OUT_ENDPOINT:3
    FORMAT:
    +++
    NOTE: Power off/on or press the reset button for 1 sec
         
    in order to get a valid USB device address.
    NAND device: Manufacture ID: 0xec, Chip ID: 0x76 (Samsung
    K9D1208V0M)
    Could not found stored vivi parameters. Use default vivi
    parameters.
    Press Return to start the LINUX/Wince now, any other key for
    vivi
    Copy linux kernel from 0x00050000 to 0x30008000, size = 0x00200000
    ... done
    zImage magic = 0x016f2818
    Setup linux parameters at 0x30000100
    linux command line is: "noinitrd root=/dev/mtdblock2 init=/linuxrc
    console=ttySAC0"
    MACH_TYPE = 782
    NOW, Booting Linux......
    Uncompressing
    Linux...............................................................................................................
    done, booting the kernel.
    Linux version 2.6.25.8 (root@localhost.localdomain) (gcc version
    3.4.5) #1 Tue May 5 20:26:19 CST 2009
    CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
    Machine: SMDK2440
    ATAG_INITRD is deprecated; please update your bootloader.
    Memory policy: ECC disabled, Data cache writeback
    CPU S3C2440A (id 0x32440001)
    S3C244X: core 405.000 MHz, memory 101.250 MHz, peripheral 50.625
    MHz
    S3C24XX Clocks, (c) 2004 Simtec Electronics
    CLOCK: Slow mode (1.500 MHz), fast, MPLL on, UPLL on
    CPU0: D VIVT write-back cache
    CPU0: I cache: 16384 bytes, associativity 64, 32 byte lines, 8
    sets
    CPU0: D cache: 16384 bytes, associativity 64, 32 byte lines, 8
    sets
    Built 1 zonelists in Zone order, mobility grouping on. Total pages:
    16256
    Kernel command line: noinitrd root=/dev/mtdblock2 init=/linuxrc
    console=ttySAC0
    irq: clearing pending status 02000000
    irq: clearing subpending status 00000002
    PID hash table entries: 256 (order: 8, 1024 bytes)
    timer tcon=00000000, tcnt a4ca, tcfg 00000200,00000000, usec
    00001e57
    Console: colour dummy device 80x30
    console [ttySAC0] enabled
    Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
    Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
    Memory: 64MB = 64MB total
    Memory: 61232KB available (3188K code, 295K data, 132K init)
    Mount-cache hash table entries: 512
    CPU: Testing write buffer coherency: ok
    net_namespace: 152 bytes
    NET: Registered protocol family 16
    S3C2410 Power Management, (c) 2004 Simtec Electronics
    S3C2440: Initialising architecture
    S3C2440: IRQ Support
    S3C24XX DMA Driver, (c) 2003-2004,2006 Simtec Electronics
    DMA channel 0 at c4800000, irq 33
    DMA channel 1 at c4800040, irq 34
    DMA channel 2 at c4800080, irq 35
    DMA channel 3 at c48000c0, irq 36
    S3C244X: Clock Support, DVS off
    usbcore: registered new interface driver usbfs
    usbcore: registered new interface driver hub
    usbcore: registered new device driver usb
    NET: Registered protocol family 2
    IP route cache hash table entries: 1024 (order: 0, 4096
    bytes)
    TCP established hash table entries: 2048 (order: 2, 16384
    bytes)
    TCP bind hash table entries: 2048 (order: 1, 8192 bytes)
    TCP: Hash tables configured (established 2048 bind 2048)
    TCP reno registered
    NetWinder Floating Point Emulator V0.97 (double precision)
    JFFS2 version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
    fuse init (API version 7.9)
    yaffs May 5 2009 20:22:12 Installing.
    io scheduler noop registered
    io scheduler anticipatory registered (default)
    io scheduler deadline registered
    io scheduler cfq registered
    Console: switching to colour frame buffer device 30x40
    fb0: s3c2410fb frame buffer device
    lp: driver loaded but no devices found
    ppdev: user-space parallel port driver
    Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing
    enabled
    s3c2440-uart.0: s3c2410_serial0 at MMIO 0x50000000 (irq = 70) is a
    S3C2440
    s3c2440-uart.1: s3c2410_serial1 at MMIO 0x50004000 (irq = 73) is a
    S3C2440
    s3c2440-uart.2: s3c2410_serial2 at MMIO 0x50008000 (irq = 76) is a
    S3C2440
    brd: module loaded
    loop: module loaded
    dm9000 Ethernet Driver, V1.30
    Uniform Multi-Platform E-IDE driver
    ide: Assuming 50MHz system bus speed for PIO modes; override with
    idebus=xx
    S3C24XX NAND Driver, (c) 2004 Simtec Electronics
    s3c2440-nand s3c2440-nand: Tacls=3, 29ns Twrph0=7 69ns, Twrph1=3
    29ns
    NAND device: Manufacturer ID: 0xec, Chip ID: 0x76 (Samsung NAND
    64MiB 3,3V 8-bit)
    Scanning device for bad blocks
    Creating 3 MTD partitions on "NAND 64MiB 3,3V 8-bit":
    0x00000000-0x00020000 : "supervivi"
    0x00050000-0x00250000 : "kernel_linux2.6.25"
    0x00250000-0x03ffc000 : "yaffs2_root"
    usbmon: debugfs is not available
    s3c2410-ohci s3c2410-ohci: S3C24XX OHCI
    s3c2410-ohci s3c2410-ohci: new USB bus registered, assigned bus
    number 1
    s3c2410-ohci s3c2410-ohci: irq 42, io mem 0x49000000
    usb usb1: configuration #1 chosen from 1 choice
    hub 1-0:1.0: USB hub found
    hub 1-0:1.0: 2 ports detected
    mice: PS/2 mouse device common for all mice
    S3C24XX RTC, (c) 2004,2006 Simtec Electronics
    s3c2440-i2c s3c2440-i2c: slave address 0x10
    s3c2440-i2c s3c2440-i2c: bus frequency set to 98 KHz
    s3c2440-i2c s3c2440-i2c: i2c-0: S3C I2C adapter
    S3C2410 Watchdog Timer, (c) 2004 Simtec Electronics
    s3c2410-wdt s3c2410-wdt: watchdog inactive, reset disabled, irq
    enabled
    TCP cubic registered
    NET: Registered protocol family 1
    RPC: Registered udp transport module.
    RPC: Registered tcp transport module.
    drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
    yaffs: dev is 32505858 name is "mtdblock2"
    yaffs: passed flags ""
    yaffs: Attempting MTD mount on 31.2, "mtdblock2"
    yaffs_read_super: isCheckpointed 0
    VFS: Mounted root (yaffs filesystem).
    Freeing init memory: 132K
    Please press Enter to activate this console.
    [root@Embed_jiajintao /]# ls
    bin        
    home     
    lost+found
    proc   
    sys      
    var
    dev        
    lib      
    mnt        
    root   
    tmp      
    web
    etc        
    linuxrc  
    opt        
    sbin   
    usr
    [root@Embed_jiajintao /]#
                   
                   
                   

    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/109094/showart_2132162.html
  • 您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP