Android内核和普通Linux根文件系统的配合 请问一下,在一个Android平台上,我不想用Android平台自带的根文件系统(主要是太复杂),而用一个在其他嵌入式Linux根文件系统,这中间需要对个这个根文件系统作特殊的配置吗?现在这种融合的系统基本上能跑起来,但是网络接口上有点问题,在TCP传输一阵子之后,系统会完全死掉,串口上没有任何输出信息,core dump也没有,很郁闷。麻烦各位高人指教一下!先谢过了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 android用的不是glibc而是bionic C库,android的网络操作依赖libnetutils。不同的C库有可能产生不同影响。用ulimit打开core dump文件或者抓包,试试看吧 在initrc中配置根文件系统构建自己的rootfs 请问这个bionic C库是编译在内核里边的吗?可以修改内核配置(重新编译内核)使其支持glibc吗?如果不能,可以在Android下编译我现在的应用程序吗(NDK能做到?)?非常感谢你的回复,让我收益匪浅。我的根文件系统是普通Linux的,/lib目录下的目前库文件也是普通Linux交叉编译的,目前有如以下文件ld-2.5.so libc.so.6 libm.so.6 librt.so.1ld-linux.so.3 libgcc_s.so.1 libpthread.so.0 这种做法是用的Android自带的根文件系统,然后把自己的文件系统mount在某个目录下?我现在是直接把我的文件系统作为Android内核的根文件系统来使用,整个系统基本上跑起来了,只是有个应用程序跑起来有点不正常。谢谢你的回复! bionic C库,是android默认使用的C库,跟内核没有关系。如果没有修改,NDK中交叉编译使用的C库也是bionic。在linux下跑android可以吧android看作是一个应用程序,他需要的库在/system/lib下,应该和你文件系统的/lib不冲突,也不能冲突。android用了ramdisk机制,如果你不想用,完全可以绕过。kernel参数中root= 你现在的文件系统的根位置,相当与用你现在的文件系统做android的ramdisk 谢谢你,解释的很清楚。我用的也是ramdisk作为rootfs,但是我自己的ramdisk,压缩包大概有3MB,包含busybox、库、各种配置文件,以及我的应用程序。Android自带的ramdisk很小,只有100多KB,当然它会mount其他文件系统,如system和userdata。我相当于完全抛弃了Android的文件系统,而使用自己的rootfs和库。我的应用程序也是基于这些库编译,所以不存在和Bionic C库冲突的问题,而且我还试过采用-static编译应用程序,仍然会出现问题。看来得试试其它办法了。 但是网络接口上有点问题,在TCP传输一阵子之后,系统会完全死掉,串口上没有任何输出信息,core dump也没有,这个是否是ROOTFS有关联,应该是网络库的问题或者其他方面的问题 最近发现,如果限制了网络传输速率,则不会死机。之前没有限速时,CPU占用率很高,95%以上;限速之后, CPU占用率低了一些。不限速这种情况下,会不会是其他的进程/线程没有机会被执行而把系统挂死?ps一下,系统有如下进程:# psPID 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 另外,1号进程是swapper,而init的进程号是1045,这是不是有问题啊?1号进程应该是init才对吧? arm linux 平台下是否可以调用android下动态库 求助 android:backgroundDimEnabled 属性怎么用代码实现 android 蓝牙接收数据问题 android videoview oninfolistner如何监听 关于New一个对象的问题!!?? 谁有动态背景的源代码,可不可以看看? [新手求教]App_Inventor开发安卓应用局限性大么 android 写了个service 在虚拟机测试可以启动 安装到手机后就启动不了 启动了也没有执行方法 Android framework相关书籍,求推荐 复写listview问题 请问各路大神,这是什么问题,小白不太明白 彩信不能接收音频文件 时光轴的实现
用ulimit打开core dump文件或者抓包,试试看吧
请问这个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
这种做法是用的Android自带的根文件系统,然后把自己的文件系统mount在某个目录下?我现在是直接把我的文件系统作为Android内核的根文件系统来使用,整个系统基本上跑起来了,只是有个应用程序跑起来有点不正常。谢谢你的回复!
在linux下跑android可以吧android看作是一个应用程序,他需要的库在/system/lib下,应该和你文件系统的/lib不冲突,也不能冲突。
android用了ramdisk机制,如果你不想用,完全可以绕过。kernel参数中root= 你现在的文件系统的根位置,相当与用你现在的文件系统做android的ramdisk
谢谢你,解释的很清楚。
我用的也是ramdisk作为rootfs,但是我自己的ramdisk,压缩包大概有3MB,包含busybox、库、各种配置文件,以及我的应用程序。Android自带的ramdisk很小,只有100多KB,当然它会mount其他文件系统,如system和userdata。
我相当于完全抛弃了Android的文件系统,而使用自己的rootfs和库。我的应用程序也是基于这些库编译,所以不存在和Bionic C库冲突的问题,而且我还试过采用-static编译应用程序,仍然会出现问题。
看来得试试其它办法了。
不限速这种情况下,会不会是其他的进程/线程没有机会被执行而把系统挂死?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
另外,1号进程是swapper,而init的进程号是1045,这是不是有问题啊?1号进程应该是init才对吧?