zoukankan      html  css  js  c++  java
  • S3C2440 制作最新busybox文件系统

    2. 制作基本文件系统

    2.1 下载源码

    文件系统是根据busybox来制作的.
    所以网上下载: https://busybox.net/downloads/
    我下的是最新的1.31版本, 用tar vxJf 解压后.

    2.2 配置交叉编译环境

    make defconfig
    make menuconfig
    setting->
    Cross compile prefix和Path to sysroot要配置
    [/opt/gcc-4.6.4/bin/arm-linux-]
    [/opt/gcc-4.6.4/arm-arm1176jzfssf-linux-gnueabi/sysroot]

     

    2.3 裁剪同百度

    不裁也行

    2.4 编译

    make V=s ...
    最后成功后: 
      LINK    busybox_unstripped
    Trying libraries: crypt m resolv
     Library crypt is not needed, excluding it
     Library m is needed, can't exclude it (yet)
     Library resolv is needed, can't exclude it (yet)
    Final link with: m resolv
      DOC     busybox.pod
      DOC     BusyBox.txt
      DOC     busybox.1
      DOC     BusyBox.html
    
    
    ls 出现了busybox
    
    执行make install busybox, 生成_install 文件夹.

    2.5 制作文件系统

    将_install 拷贝到外头
    cp -rf _install ../rootfs/
    1. 补全文件夹
    mkdir proc etc var lib dev sys ...
    
    2. 寻找依赖库,cp到lib中
    
    3.创建dev/console
        sudo mknod console c 5 1
    4. 创建dev/tty123
        sudo mknod tty1 c 4 1
        sudo mknod tty2 c 4 3
        sudo mknod tty3 c 4 3
        
    5. 配置/etc脚本
    5.1 将案例的etc全部拷贝过来
        cp ../examples/bootfloppy/etc/* etc/ -arf
        [fstab  init.d  inittab  profile]
    6. nfs启动或者制作文件系统
    [ 2. 寻找依赖库,cp到lib中 ]
    
    busybox动态依赖库:
    readelf -d busybox | grep NEEDED
    
    ld-linux.so.3     动态链接库
    libc.so.6        c库    
    libm.so.6        math库
    还有
    libpthread.so.0/opt/gcc-4.6.4/arm-arm1176jzfssf-linux-gnueabi/lib 里面找到需要的库,然后cp到_install/lib下.
    [ 6. nfs启动或者制作文件系统 ]
    因为 这个版本的linux内核的FSsetting中,没有看见Yaffs2的支持,所以暂时先做jffs2的文件系统.
    
    ubuntu: sudo apt-get install mtd-utils    //下载制作工具
    mkfs.jffs2 -n -d rootfs/ --pad=0x800000 -s 2048 -e 0x20000 -l -o rootfs.jffs2
    
    --pad=0x800000 填充到8M
    -s 2048 根据nand flash决定, 我的页大小是2k,
    -e 每次擦除128K, 块大小是128k

    生成 rootfs.jffs2 

     

    2.6 烧录测试

    还是用tftp
    mtdparts=nandflash0:256k@0(bootloader),128k(params),4m(kernel),-(root)
    
    tftp 0x30000000 rootfs.jffs2
    nand erase root
    nand write.jffs2 0x30000000 root $(filesize)
    
    因为是jffs2文件系统,所以启动的时候要修改bootmargs
    bootargs=root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200 rootfstype=jffs2 
    
    要制定roottype=jffs2 才能识别到.
    如果遇到错误:检查2个问题:
    
    1, 是未能识别到文件系统,还是文件系统linuxrc执行错误.
    
    第一种的话,未能识别到文件系统,尝试挂载其他文件系统,均错误,所以painc.
    这种错误回来添加roottype=jffs2
    
    第二种,
    VFS: Mounted root (jffs2 filesystem) on device 31:3.
    Freeing unused kernel memory: 196K
    This architecture does not have kernel memory protection.
    
    linuxrc(1): undefind instruct :pc=(ptrval)
    ...
    Kernel panic -not syncing: Attempted to kill init! exitcode=0x00000004
    
    可以看到,文件系统已经识别到,但是在执行init程序的时候,发现未定义指令,报错了.
    
    这个问题困扰了很久,最后百度了很久,找到了原因. 
    在对busybox 执行了objdump后, 确实发现了clz这条指令,帖子上说,这条指令是armv5以后的cpu才支持的,而我的s3c2440是armv4t,当然会报错了,在找到原因后,就想着怎么解决. 在CFLAGS中加入-mach=armv4t 编译也没有用.
    
    
    既然如此,我就索性把gcc编译器版本降到3.+的版本, 
    make menuconfig
    把之前的
    
    [/opt/gcc-4.6.4/bin/arm-linux-]
    [/opt/gcc-4.6.4/arm-arm1176jzfssf-linux-gnueabi/sysroot]
    
    改成
    [/opt/gcc-3.../arm-linux-]        //路径根据个人
    []                                //3.+的gcc中,好像没有rootfs这个文件夹,索性置空
    
    编译,通过,然后objdump,发现clz已经没了,胜利在望,
    make install,将/bin/下的busybox 替换成之前已经做好的文件系统中的bin/busybox
    
    然后重新打包成 jffs2文件. 
    tftp烧录,
    启动,
    通过.
    
    ALSA device list:
      No soundcards found.
     VFS: Mounted root (jffs2 filesystem) on device 31:3.
    Freeing unused kernel memory: 196K
    This architecture does not have kernel memory protection.
    Run /linuxrc as init process
    tmpfs: No value for mount option 'default'
    mount: mounting tmpfs on /tmp failed: Invalid argument
    sysfs: Unknown parameter 'default'
    mount: mounting sysfs on /sys failed: Invalid argument
    
    -n Processing /etc/profile... 
    Done
    
    通过撒花.

    2.7 文件系统的完善

    那些个启动脚本啊, 文件系统挂载,再说吧,太琐碎了,百度相关就好.

  • 相关阅读:
    cocos2dLua3.17.2当在出厂就为 Android11 Version30的手机上黑屏,无法运行的问题 qd
    cocos2dLua3.17.2 + AS3.5.2 创建工程成功 qd
    getdata软件的使用
    下载及安装Python详细步骤
    【硬件知识】电路图标识符号
    Java中高级开发工程师最新面试题整理
    jquery获得值和控制值
    js 根据日期做星座联动,简洁
    Android remove default apk
    registry collection: right click menu(右键菜单清理)/navigator pane(我的电脑左边栏清理)
  • 原文地址:https://www.cnblogs.com/kmist/p/11362907.html
Copyright © 2011-2022 走看看