这部分记录的是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天左右搞定.
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.csdn.net/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.2
而从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.csdn.net/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.2