init started:  BusyBox v1.4.1 (2007-02-03 10:47:43 CST) multi-call binary
Starting pid 743, console /dev/console: '/etc/init.d/rcS'

Please press Enter to activate this console.
Starting pid 753, console /dev/console: '/bin/sh'

BusyBox v1.4.1 (2007-02-03 10:47:43 CST) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

-sh: can't access tty; job control turned off
Set search library path int /etc/profile
Set user path in /etc/profile
#
可恶的shell终于出来拉...

      搞了两天,原来又犯老毛病--粗心...自从数据结构成绩出来后,心情一直都不好,那么简单的卷子分数竟然这么垃圾,还以为老师故意为难...直到前两天才发现,原来是自己粗心,做错三题,没什么好说的,只能怪自己。月满自亏,水满自溢,人满容易跌倒...人真奇怪,越是提醒,越是容易忘记。以此为训,不要在同一个地方跌倒多次!

      哈哈,牢骚发完,该总结以下移植过程了:

1.制作 ramdisk 。本打算直接用NFS挂文件系统的,可惜网卡驱动还没完全ok... 该部分内容可以参考Linux系统移植 (十分感谢前辈的共享) 和  http://www.hhcn.com/cgi-bin/topic.cgi?forum=3&topic=816 。

        #dd if=/dev/zero of=/dev/ram1 bs=1k count=8000

        # losetup /dev/loop2 ramdisk

        # mkfs.ext2 /dev/loop2

        #mkdir ram

        # mount -t ext2 /dev/loop2 ram 

        #cd ram

        #mkdir bin dev etc lib mnt proc sbin sys tmp root usr

        #mkdir mnt/etc

        #mkdir usr/bin usr/lib usr/sbin

        #mknod -m 660 dev/console c 5 1

        #mknod -m 660 dev/null c 1 3

        #touch linuxrc  (至此,空ramdisk制作完毕)

当然,lib里面还要拷入一些库文件,为了方便,我将交叉编译的库全放进去。

        #cp -rfd /usr/local/arm/3.4.1/arm-linux/lib/* ./  (注意-d,保持库文件的链接关系)

2.下载,当然是最新版的 BusyBox 1.4.1 (stable)  。解压,修改Makefile:

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

接着便是make menuconfig 。如果不确定选哪些的话,可以用make depconfig 。值得注意的是 shell 的选择,在 Choose your default shell (none) 这一项回车后选择 ash , 否则,你会想我一样头疼大半天,make 后bin目录下就是没有sh ,而默认shell命令就是sh。错误提示如下:

Please press Enter to activate this console.
Starting pid 739, console /dev/console: '/bin/sh'
sh: applet not found
Process '-/bin/sh' (pid 739) exited.  Scheduling it for restart.

关于Build Options 的 Build BusyBox as a static binary (no shared libs) 静态编译,我用3.4.1版的交叉编译怎么都不通过,提示 glibc 有问题:

applets/applets.c:20:2: #warning Static linking against glibc produces buggy executables
applets/applets.c:21:2: #warning (glibc does not cope well with ld --gc-sections).
applets/applets.c:22:2: #warning See sources.redhat.com/bugzilla/show_bug.cgi?id=3400
applets/applets.c:23:2: #warning Note that glibc is unsuitable for static linking anyway.
applets/applets.c:24:2: #warning If you still want to do it, remove -Wl,--gc-sections
applets/applets.c:25:2: #warning from top-level Makefile and remove this warning

2.95.3更加不行,唯有选用 Build shared lib busybox 。这样,就需要往 ram/lib 目录拷入相关的库文件。make , make install 后就出来 _install 目录,全拷到 ram 目录下。

        #gzip -9c ramdisk > ramdisk.image.gz

      到这里,基本的都已搞定,可以 reset 开发板看看。下面是常见的错误:

Failed to execute /linuxrc.

      如果传给内核的参数 init=/linuxrc 没错的话,就要看看linuxrc文件是否正确,是否有权限运行。刚开始,由于没有选中 ash shell ,bin 目录下还没有 sh ,而我修改的 linuxrc 第一句的内容是 #!/bin/sh ,根本就不能解析。后来改为 #!/bin/ash ,能解析了,也高兴了一下,可惜提示 sh: applet not found 。选中默认的shell后问题解决。关于Linux的启动详细过程,可以参考 Linux 初始 RAM 磁盘(initrd)概述 、Linux Root Filesystem Primer 这两篇文章。Linux2.6 还引入了新的ram文件系统,配置起来相对简单,有机会尝试一下...

Warning: unable to open an initial console

      新的ramdisk不行,我换回原来的ramdisk,发现可以跑,只是提示找不到终端。于是,对比我和其它网友的串口输出。发现我的Linux-2.6.19.2没有 Mounted devfs on /dev 这项。大段大段的搜索后发现,这个devfs已被提出内核,而替代者udev在嵌入式方面还没有一点资料...网上的资料全都说从fs/Kconfig添加:

onfig DEVFS_FS
        bool "/dev file system support (OBSOLETE)"
        default y
config DEVFS_MOUNT

        bool "Automatically mount at boot"
        default y
        depends on DEVFS_FS

可是,一点用处都没有...从Linux-2.6.18开始,包括文档在内已没有一点devfs的使用信息。而网上移植的Linux版本都比较低,所以...本想尝试从旧版本中移植相关代码过来(有点奇怪^_^),幸好当我对比新旧ramdisk时发现旧的ramdisk dev目录下缺少 console ,mknod 后可以进入旧版的 busybox 0.6 ...

      最后是BusyBox的编译问题,使用3.4.1带的libc库编译,很容易出现与BusyBox里的程序不兼容现象。如:

modutils/lib.a(insmod.o)(.text.insmod_main+0x444): In function `insmod_main':
: undefined reference to `query_module'

miscutils/readahead.c: In function `readahead_main':

miscutils/taskset.c:17: error: parse error before '*' token
miscutils/taskset.c:18: warning: function declaration isn't a prototype
miscutils/taskset.c: In function `__from_cpuset':
......

最根本的解决办法是换一个libc库,可是现在还不知道哪个库最合适,唯有暂时将有问题的命令关掉...

      两个星期过得真快,我的系统也终于跑起来,虽然还有很多问题,但总算有点收获 ^_^







评论

  • 看了半天还是看不懂.收藏了慢慢研究

    卓博网网友 (http://www.nobleweb.cn) 发表于 2008-06-19 12:22:15
  • 在将busybox编译为静态时候,如果选用uclibc库应该可以编译通过吧?

    wangr () 发表于 2008-05-02 16:45:17
  • wtxymcjzd sfpxdmo fkoxmcgw aprdlw wqfor harnbxwm xgeda

    kjqnm vifxacdok (http://www.ymxsk.ogvwejrad.com) 发表于 2008-04-15 06:22:32
  • geb62jjecth52f valign css valign css

    valign css (http://valign-css.walkway.in/) 发表于 2007-12-26 08:51:50
  • 选了ash,而且我把linuxrc开头也改成#!/bin/ash
    我是想从NFS直接启动的,所以没有烧写文件系统到开发板里
    是不是linuxrc的脚本写的有问题?
    这是最后一步了,就是按回车就应该进入#的shell了.....谢谢了

    weibing 回复 Sky 说:
    你看看Choose your default shell (none)这项,是否为ash.另外,linuxrc里直接写#!/bin/sh就行了,会链接到默认shell的。
    (2007-10-28 23:14:04)

    Sky () 发表于 2007-10-28 17:48:49
  • init started: BusyBox v1.1.3 (2007.10.26-06:10+0000) multi-call binary
    init started: BusyBox v1.1.3 (2007.10.26-06:10+0000) multi-call binary
    Starting pid 28, console /dev/tts/0: '/etc/init.d/rcS'
    Please press Enter to activate this console.
    Starting pid 30, console /dev/tts/0: '/bin/sh'
    sh: applet not found

    这是为什么呢?按了回车应该进入console了呀,万分感谢

    weibing 回复 Sky 说:
    你busybox里没有选择默认的shell
    (2007-10-28 15:49:58)

    Sky () 发表于 2007-10-27 16:26:21
  • 小弟最近 也在用 busybox 做文件系统 不过参照你的做法 还是出现

    console:/dev/console

    sh:applet not found

    可以讲得具体一点吗

    weibing 回复 sunke 说:
    你默认的shell没选吧,我的文章红色字部分有点出的,请看的时候具体一点:)
    (2007-07-26 12:26:42)

    sunke () 发表于 2007-07-26 11:06:43
  • 小弟用的也是和您一样的编译环境3.4.1

    连安装地址都是一样的,哈哈——

    /usr/local/arm/3.4.1/bin/arm-linux-

    可是编译vivi时通不过

    对了vivi应当只需要修改根目录下的makefile就可以了对吗?

    需要指定linux2.6内核的头文件地址对吗,您要是有可编译通过的vivi源码可否给我一份 ,若是不行可否告知应当修改哪些东西?

    weibing 回复 方正 说:
    vivi我没有用过,而且u-boot我只在2.95下编译通过...好像说过很多次了-_- -_- -_-
    (2007-07-15 13:06:04)

    方正 (http://西安) 发表于 2007-07-14 11:21:49
  • 请问我用的3.4.1的交叉工具链编译vivi却通不过不知道为什么,难道需要改变vivi的源代码吗


    weibing 回复 请问我用的3.4.1的交叉工具链编译 说:
    vivi我没有用过,而且u-boot我只在2.95下编译通过...好像说过很多次了-_-
    (2007-07-14 21:49:11)

  • 按楼主的方式,编译器3.4.1,链接的时候提示错误:



    Archive member included because of file (symbol)



    archival/lib.a(bbunzip.o) applets/built-in.o (bunzip2_main)

    archival/lib.a(gzip.o) applets/built-in.o (gzip_main)

    archival/lib.a(unzip.o) applets/built-in.o (unzip_main)

    archival/libunarchive/lib.a(decompress_bunzip2.o)

    applets/built-in.o (read_bunzip)

    archival/libunarchive/lib.a(decompress_unzip.o)

    archival/lib.a(unzip.o) (inflate_unzip)

    archival/libunarchive/lib.a(find_list_entry.o)

    archival/lib.a(unzip.o) (find_list_entry)

    console-tools/lib.a(chvt.o) applets/built-in.o (chvt_main)

    console-tools/lib.a(clear.o) applets/built-in.o (clear_main)

    console-tools/lib.a(deallocvt.o)

    applets/built-in.o (deallocvt_main)

    console-tools/lib.a(dumpkmap.o)

    applets/built-in.o (dumpkmap_main)

    console-tools/lib.a(loadfont.o)

    applets/built-in.o (loadfont_main)

    console-tools/lib.a(loadkmap.o)

    applets/built-in.o (loadkmap_main)

    console-tools/lib.a(openvt.o)

    applets/built-in.o (openvt_main)

    console-tools/lib.a(reset.o) applets/built-in.o (reset_main)

    console-tools/lib.a(resize.o)

    applets/built-in.o (resize_main)

    console-tools/lib.a(setconsole.o)

    applets/built-in.o (setconsole_main)

    console-tools/lib.a(setkeycodes.o)

    applets/built-in.o (setkeycodes_main)

    console-tools/lib.a(setlogcons.o)

    applets/built-in.o (setlogcons_main)

    coreutils/lib.a(basename.o) applets/built-in.o (basename_main)

    coreutils/lib.a(cal.o) applets/built-in.o (cal_main)

    coreutils/lib.a(cat.o) applets/built-in.o (cat_main)

    coreutils/lib.a(catv.o) applets/built-in.o (catv_main)

    coreutils/lib.a(chgrp.o) applets/built-in.o (chgrp_main)

    coreutils/lib.a(chmod.o) applets/built-in.o (chmod_main)

    coreutils/lib.a(chown.o) applets/built-in.o (chown_main)

    coreutils/lib.a(chroot.o) applets/built-in.o (chroot_main)

    coreutils/lib.a(cksum.o) applets/built-in.o (cksum_main)

    coreutils/lib.a(cmp.o) applets/built-in.o (cmp_main)

    coreutils/lib.a(comm.o) applets/built-in.o (comm_main)

    coreutils/lib.a(cp.o) applets/built-in.o (cp_main)

    coreutils/lib.a(cut.o) applets/built-in.o (cut_main)



    。。。 。。。

    .debug_abbrev 0x00000074 0x10 /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/lib/crtn.o



    .debug_line 0x00000000 0x62d

    *(.debug_line)

    .debug_line 0x00000000 0xa6 /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/lib/crti.o

    .debug_line 0x000000a6 0xcc /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_udivsi3.oS)

    .debug_line 0x00000172 0xd8 /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_divsi3.oS)

    .debug_line 0x0000024a 0xbe /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_umodsi3.oS)

    .debug_line 0x00000308 0xc4 /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_modsi3.oS)

    .debug_line 0x000003cc 0xb8 /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_dvmd_lnx.oS)

    .debug_line 0x00000484 0x1a /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_muldi3.oS)

    .debug_line 0x0000049e 0x1a /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_lshrdi3.oS)

    .debug_line 0x000004b8 0x1a /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_ashldi3.oS)

    .debug_line 0x000004d2 0x1a /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_ashrdi3.oS)

    .debug_line 0x000004ec 0x1a /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_cmpdi2.oS)

    .debug_line 0x00000506 0x1a /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_floatdidf.oS)

    .debug_line 0x00000520 0x1a /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_divdi3.oS)

    .debug_line 0x0000053a 0x1a /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_moddi3.oS)

    .debug_line 0x00000554 0x1a /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_udivdi3.oS)

    .debug_line 0x0000056e 0x1a /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_umoddi3.oS)

    .debug_line 0x00000588 0x1a /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/libgcc.a(_clz.oS)

    .debug_line 0x000005a2 0x8b /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/lib/crtn.o



    .debug_frame

    *(.debug_frame)



    .debug_str

    *(.debug_str)



    .debug_loc

    *(.debug_loc)



    .debug_macinfo

    *(.debug_macinfo)



    .debug_weaknames

    *(.debug_weaknames)



    .debug_funcnames

    *(.debug_funcnames)



    .debug_typenames

    *(.debug_typenames)



    .debug_varnames

    *(.debug_varnames)



    .note.gnu.arm.ident

    *(.note.gnu.arm.ident)



    /DISCARD/

    *(.note.GNU-stack)

    OUTPUT(busybox_unstripped elf32-littlearm)

    collect2: ld returned 1 exit status

    weibing 回复 lstone 说:
    哈哈,3.4.1我也始终没通过,都是2.95下搞的
    (2007-07-13 23:22:52)

    lstone () 发表于 2007-07-13 22:45:11
  • redhat9 /home下 root权限



    #dd if=/dev/zero of=/home/ramdisk bs=1k count=8192



    # losetup /dev/loop2 ramdisk



    # mkfs.ext2 /dev/loop2



    #mkdir /mnt/ramdisk



    # mount -t ext2 /dev/loop2 /mnt/ramdisk



    #cd /mnt/ramdisk



    拷贝需要的文件到ramdisk文件夹里面,才4M多点



    #mknod -m 660 dev/console c 5 1



    #mknod -m 660 dev/null c 1 3



    #umount /dev/loop2



    这时候出错,说这个设备现在忙。。。。



    不卸载了,用gzip -9 ramdisk,出来的ramdisk.gz才8。4k大小。



    帮帮我啊,谢谢了。

    weibing 回复 idnk 说:
    。。。这个问题嘛,重启试一下吧:)
    (2007-06-04 20:10:57)

    idnk () 发表于 2007-06-02 21:03:02
  • 我现在试着做ramdisk,那么创建文件系统时,dev/ram0这个文件一定要创建吗,反正我创建了。

    .config相关设置:

    CONFIG_BLK_DEV_NBD=m

    CONFIG_BLK_DEV_RAM=y

    CONFIG_BLK_DEV_RAM_COUNT=1

    CONFIG_BLK_DEV_RAM_SIZE=2048

    CONFIG_BLK_DEV_INITRD=y

    CONFIG_INITRAMFS_SOURCE=""

    现在linux启动到:

    RAMDISK: Compressed image found at block 0



    然后就死掉了,不知道怎么回事?

    weibing 回复 mybao 说:
    这个也真是麻烦,试试CONFIG_BLK_DEV_RAM_SIZE改大一点吧。8192?搞这个ramdisk时还没碰到过什么问题...
    (2007-05-31 17:15:15)

    mybao () 发表于 2007-05-31 16:04:29
  • CONFIG_CMDLINE="root=/dev/ram0 initrd=0xc400000,2M console=ttyS0,115200 init=/linuxrc" 这个是我的命令行,

    创建文件系统时,dev/ram0这个文件要创建吗,反正我创建了。

    现在linux启动到RAMDISK: Compressed image found at block 0,然后就死掉了,怎么回事?

    mybao () 发表于 2007-05-31 15:04:09
  • 用ramdisk作为文件系统的话,default command line,要这样写吗:“root=dev/ram0 initrd=0xa0800000,4M ramdisk=8192 ”

    这几个都少不了吗,是什么意思呢?

    /dev/ram0 这个文件也必须创建吗

    weibing 回复 mybao 说:
    /dev/ram0是ramdisk的节点文件,内核创建的。
    initrd是ramdisk的载入地址。
    后面就是大小了。
    这些都是用来通知内核,我要使用的ramdisk具体是怎么的。
    (2007-05-31 12:49:26)

    mybao () 发表于 2007-05-30 16:38:34
  • lost+found文件夹

    是什么东西,没整明白

    mybao () 发表于 2007-05-30 15:51:05
  • #dd if=/dev/zero of=/dev/ram1 bs=1k ount=8000

    # losetup /dev/loop2 ramdisk

    这个是不是有问题?

    我这么用的:

    # dd if=/dev/zero of=ramdisk bs=1k count=8000

    # losetup /dev/loop2 ramdisk

    # mkfs.ext2 /dev/loop2

    # mount -t ext2 /dev/loop2 /mnt/ramdisk



    发现 /mnt/ramdisk下面只有lost+found文件夹,这个正常吗


    weibing 回复 mybao 说:
    #dd if=/dev/zero of=/dev/ram1 bs=1k ount=8000
    这句确实有问题,少了个“C”:)
    lost+found相当于windows的垃圾桶,正常的。
    (2007-05-31 12:47:21)

    mybao () 发表于 2007-05-30 14:59:50
  • -sh: can't access tty; job control turned off



    这句提示是什么意思,对系统有什么影响?我的也有提示这一句,正在努力解决中.


    weibing 回复 paraller 说:
    出现这句话的原因有很多,google一搜就大把,我遇到过的只有一次busybox的编译不完整时出现,make clean & make 就ok了。
    (2007-05-27 17:17:20)

    paraller () 发表于 2007-05-25 11:32:31
  • 偶再加一句,新的busybox中有mdev,和udev比较相似,可以试试.

    weibing 回复 fcicqbbs 说:
    哦,谢谢。关于mdev,可以参考我的文章《EV on embeded Linux-2.6.19.2》
    http://weibing.blogbus.com/logs/4485453.html
    里面有关于mdev的一点应用 :)
    (2007-03-20 21:20:36)

    fcicqbbs (http://www.fcicq.net/wp/) 发表于 2007-03-20 18:17:15
  • 嵌入式用uclibc吧.

    没有udev可以自己复制/dev出来,一样用.

    weibing 回复 fcicq 说:
    呵呵,uclibc下载很久了,不过现在还不断地测试驱动,没时间也没需要去搞它 ^_^

    使用udev只不过方便而以,如果确实有需要,或者说有这个时间,所有都可以自己用shell写...但既然已经有朋友做出这么好的东西,不用岂不是有点浪费?
    (2007-03-04 22:40:28)

    fcicq (http://www.fcicq.net/wp/) 发表于 2007-03-04 16:43:47
  • 原来去掉对旧内核的支持 (Support version 2.2.x to 2.4.x Linux kernels) 就可以安装 Module Utilities ^_^

    weibing () 发表于 2007-02-13 16:51:14

发表评论

 姓名:
 E-mail:
 地址: