MIPS 平台 Android 移植过程记录2_kernel升级 (2.6.29.4 -> 3.0.72)

本文记录了在MIPS架构上将Android内核从2.6.29.4升级到3.0.72的过程,遇到的未处理的内核对齐访问错误导致系统启动时死机的问题。通过分析内核日志,发现死机发生在populate_rootfs阶段。建议对比3.0内核的android-recommended.cfg配置文件,检查可能遗漏的重要配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这部分记录的是kernel的升级, 之前在FPGA上跑了2.6.29的kernel去验证一些IP的功能.
而从google的网站上得到的android的source code是不包含kernel的部分的,kernel需要单独下载.
从google下载后发现是3.0.72的版本.
所以这边记录的就是kernel从2.6.29.4上升级到3.0.72上的过程.


最开始的想法就是, 先找一个3.0上的mips架构下的config档, 然后对比2.6.29上的config档的差异, 将差异弥补即可.

找了下configs的文件, 选了bcm63xx的defconfig.
下面是具体的步骤. 总体过程还算比较顺利, 3天左右搞定.

1.config文件的配置
  a.arch/mips/company 的目录copy到3.0上,kconfig/makefile的修改也copy过去
  b.在3.0上make bcm63xx_defconfig,然后make menuconfig,会出错.
  提示很多错误
...
scripts/kconfig/lxdialog/menubox.o: In function `do_scroll':
menubox.c:(.text+0x55): undefined reference to `wrefresh'
scripts/kconfig/lxdialog/menubox.o: In function `print_arrows':
menubox.c:(.text+0x1a4): undefined reference to `wrefresh'
scripts/kconfig/lxdialog/menubox.o: In function `do_print_item':
menubox.c:(.text+0x3a9): undefined reference to `wrefresh'
scripts/kconfig/lxdialog/menubox.o: In function `print_buttons':
menubox.c:(.text+0x4b1): undefined reference to `wrefresh'
collect2: ld returned 1 exit status
make[1]: *** [scripts/kconfig/mconf] Error 1
make: *** [menuconfig] Error 2

解决办法见http://blog.youkuaiyun.com/bdc995/article/details/8235429
sudo apt-get install libncurses5  libncurses5-dev
解决后,由于bcm63xx是big endian的,删掉-EL的编译选项后,能编译通过.

  c.对比2.6.29的.config文件和3.0默认的bcm63xx的.config文件.
    其中2.6中的CONFIG_DMA_NEED_PCI_MAP_STATE,对应3.0中的CONFIG_NEED_DMA_MAP_STATE
  d.公司芯片是little endian, bcm63xx是big endian.
    CONFIG_GENERIC_FIND_NEXT_BIT在2.6.29上是开的,但是3.0上接口不一样,关闭.
  e.2.6.29上CONFIG_SWAP_IO_SPACE没有打开,而bcm上打开了,所以关闭
  f.CONFIG_GENERIC_GPIO在2.6.29上是没打开的,所以3.0上也关闭
  g.CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ在2.6.29上打开,但是3.0上接口变了,维持关闭.
  h.CONFIG_GENERIC_TIME同上
  i.cpu选2.6.29的MIPS32R2
  j.
CONFIG_CPU_HAS_LLSC=y
CONFIG_CPU_MIPSR2_IRQ_VI=y 这2个保持2.6.29的
#CONFIG_SELECT_MEMORY_MODEL=y
#CONFIG_FLATMEM_MANUAL=y 这2个2.6.29上没有,关闭
CONFIG_UNEVICTABLE_LRU在2.6.29上是开的,但是3.0的相关代码不需要用预编译,3.0上不需要.
CONFIG_HIGH_RES_TIMERS在2.6.29上打开的,3.0也打开
CONFIG_HZ 维持2.6.29的1000
CONFIG_PREEMPT_VOLUNTARY维持2.6.29默认的
CONFIG_HAVE_IRQ_WORK在3.0上也没用到,关闭
CONFIG_SYSVIPC=y
CONFIG_SYSVIPC_SYSCTL=y这2个在3.0上也打开,维持2.6.29的配置
CONFIG_GENERIC_IRQ_SHOW=y维持3.0上的打开状态
CONFIG_IKCONFIG=y维持2.6.29的配置
CONFIG_RELAY=y
CONFIG_NAMESPACES=y这2个维持2.6.29的配置
CONFIG_UTS_NS=y
CONFIG_IPC_NS=y这2个维持2.6.29的配置
CONFIG_BLK_DEV_INITRD=y
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_CLASSIC_RCU=y这3个维持2.6.29的配置
CONFIG_EMBEDDED=y维持2.6.29,替换
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值