最近一直在构建基本系统,基本步骤就是之前遵循CLFS的步骤,不过中间总会出现一些问题,本次出现的问题算是比较难发现点的,这里总结下
:
1. undefined reference to 'usleep', 这个是编译uClibc的时候配置项没有勾全,UCLIBC_SUSV3_LEGACY没有打开,所以没有编译进去,在编译busybox的时候最后链接阶段就会出错。
2. Freeing init memory: 140K
Kernel panic - not syncing: Attempted to kill init!
注意这里不是说找不到init,而是执行出错,开始怎么都找不到原因,后面google偶尔看到一个跟这个情况不一样的邮件列表,里面有说 arm-none-linux-gnueabi-readelf -A file 可以查看这个文件的二进制架构信息,所以对自己的busybox看了下发现:
[dang@DANG bin]$ armv4l-microha-linux-uclibceabi-readelf -A busybox
Attribute Section: aeabi
File Attributes
Tag_CPU_name: "ARM10TDMI"
Tag_CPU_arch: v5T
Tag_ARM_ISA_use: Yes
Tag_THUMB_ISA_use: Thumb-1
Tag_ABI_PCS_wchar_t: 4
Tag_ABI_FP_denormal: Needed
Tag_ABI_FP_exceptions: Needed
Tag_ABI_FP_number_model: IEEE 754
Tag_ABI_align8_needed: Yes
Tag_ABI_enum_size: int
原来架构错了,我的2440是v4架构的,这显然不行,所以想给gcc传递mcpu=arm920t来解决。不过后来发现不行,原来gcc4.5默认只支持v5及其以上版本,后面用-with-cpu=arm9tdmi 重新构建gcc,解决问题。
3. 顺便记下arch linux的 nfs让我吃的亏:
uboot,kernel的nfs用的v1或者v2版本,而arch的默认这两个直接关掉,所以就无法挂载,正如网上所述,问题基本都是nfs配置有问题。
4. 内核的底层架构代码原来现在基本都是platform driver 模型,只要熟悉下模型代码就很好修改。
阅读(3673) | 评论(1) | 转发(2) |