请问一下,在一个Android平台上,我不想用Android平台自带的根文件系统(主要是太复杂),而用一个在其他嵌入式Linux根文件系统,这中间需要对个这个根文件系统作特殊的配置吗?现在这种融合的系统基本上能跑起来,但是网络接口上有点问题,在TCP传输一阵子之后,系统会完全死掉,串口上没有任何输出信息,core dump也没有,很郁闷。麻烦各位高人指教一下!先谢过了!

解决方案 »

  1.   

    android用的不是glibc而是bionic C库,android的网络操作依赖libnetutils。不同的C库有可能产生不同影响。
    用ulimit打开core dump文件或者抓包,试试看吧
      

  2.   

    在initrc中配置根文件系统构建自己的rootfs
      

  3.   


    请问这个bionic C库是编译在内核里边的吗?可以修改内核配置(重新编译内核)使其支持glibc吗?如果不能,可以在Android下编译我现在的应用程序吗(NDK能做到?)?非常感谢你的回复,让我收益匪浅。我的根文件系统是普通Linux的,/lib目录下的目前库文件也是普通Linux交叉编译的,目前有如以下文件
    ld-2.5.so        libc.so.6        libm.so.6        librt.so.1
    ld-linux.so.3    libgcc_s.so.1    libpthread.so.0 
      

  4.   


    这种做法是用的Android自带的根文件系统,然后把自己的文件系统mount在某个目录下?我现在是直接把我的文件系统作为Android内核的根文件系统来使用,整个系统基本上跑起来了,只是有个应用程序跑起来有点不正常。谢谢你的回复!
      

  5.   

    bionic C库,是android默认使用的C库,跟内核没有关系。如果没有修改,NDK中交叉编译使用的C库也是bionic。
    在linux下跑android可以吧android看作是一个应用程序,他需要的库在/system/lib下,应该和你文件系统的/lib不冲突,也不能冲突。
    android用了ramdisk机制,如果你不想用,完全可以绕过。kernel参数中root= 你现在的文件系统的根位置,相当与用你现在的文件系统做android的ramdisk
      

  6.   


    谢谢你,解释的很清楚。
    我用的也是ramdisk作为rootfs,但是我自己的ramdisk,压缩包大概有3MB,包含busybox、库、各种配置文件,以及我的应用程序。Android自带的ramdisk很小,只有100多KB,当然它会mount其他文件系统,如system和userdata。
    我相当于完全抛弃了Android的文件系统,而使用自己的rootfs和库。我的应用程序也是基于这些库编译,所以不存在和Bionic C库冲突的问题,而且我还试过采用-static编译应用程序,仍然会出现问题。
    看来得试试其它办法了。
      

  7.   

    但是网络接口上有点问题,在TCP传输一阵子之后,系统会完全死掉,串口上没有任何输出信息,core dump也没有,这个是否是ROOTFS有关联,应该是网络库的问题或者其他方面的问题
      

  8.   

    最近发现,如果限制了网络传输速率,则不会死机。之前没有限速时,CPU占用率很高,95%以上;限速之后, CPU占用率低了一些。
    不限速这种情况下,会不会是其他的进程/线程没有机会被执行而把系统挂死?ps一下,系统有如下进程:
    # ps
    PID   USER     TIME   COMMAND
        1 root       0:02 [swapper]
        2 root       0:00 [kthreadd]
        3 root       0:00 [ksoftirqd/0]
        4 root       0:00 [watchdog/0]
        5 root       0:00 [events/0]
        6 root       0:00 [khelper]
        9 root       0:00 [netns]
       13 root       0:00 [async/mgr]
       14 root       0:00 [pm]
       17 root       0:00 [suspend]
      163 root       0:00 [sync_supers]
      165 root       0:00 [bdi-default]
      167 root       0:00 [kblockd/0]
      176 root       0:00 [khubd]
      179 root       0:00 [kseriod]
      184 root       0:00 [kmmcd]
      194 root       0:00 [cfg80211]
      286 root       0:00 [khungtaskd]
      287 root       0:00 [kswapd0]
      334 root       0:00 [aio/0]
      343 root       0:00 [crypto/0]
      932 root       0:00 [mtdblock0]
      937 root       0:00 [mtdblock1]
      942 root       0:00 [mtdblock2]
      947 root       0:00 [mtdblock3]
      952 root       0:00 [mtdblock4]
      957 root       0:00 [mtdblock5]
      962 root       0:00 [mtdblock6]
      967 root       0:00 [mtdblock7]
      971 root       0:00 [imapx200_ssim0.]
      996 root       0:00 [gadget]
     1002 root       0:00 [file-storage]
     1027 root       0:00 [binder]
     1042 root       0:00 [mmcqd]
     1045 root       0:00 {linuxrc} init
     1064 root       0:00 [flush-1:0]
     1083 root       0:00 /usr/sbin/inetd
     1097 root       0:00 -/bin/sh
     1112 root       0:00 ps
      

  9.   


    另外,1号进程是swapper,而init的进程号是1045,这是不是有问题啊?1号进程应该是init才对吧?
      

  10.   

    arm linux 平台下是否可以调用android下动态库