免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1812 | 回复: 0
打印 上一主题 下一主题

Android ROM开发(12) 编译HTC G8 内核 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-23 03:35 |只看该作者 |倒序浏览
Andrew Huang <bluedrum@163.com>  转载请注明作者及出处



一.准备工作
 

  内核下载 
  现在HTC将开发网站由 http://developer.htc.com 从定向到http://htcdev.com/ 了。
  对于HTC G8可以选择HTC Wildfire – Froyo MR – 2.6.32 kernel source code ,最终下载的文件是
  http://dl4.htc.com/RomCode/Source_and_Binaries/buzz-MR-2.6.32-g8f75634.tar.gz 

  关于编译器,从原理上讲一般的eabi的ARM 编译器应该都可以。我先用我的arm-linux-gcc 4.2.2 先试一下。
 
 解压内核
   tar xvf buzz-MR-2.6.32-g8f75634.tar.gz
   mv buzz-MR-2.6.32-g8f75634 g8-buzz-2.6.32

 取配置文件
 这个内核是没有配置好的内核文件备份,因此必须要从一台激活的HTC G8手机取得配置文件。
  
  直接用如下命令 
     adb pull /proc/config.gz 

   取得当前内核配置,将其解压
    gunzip config.gz

    cp config g8-buzz-2.6.32/.config

二.编译内核

  修改内核编译器,即内核的Makefile
   原来是  CROSS_COMPILE  ?= arm-eabi- 将其修改成我当前的编译器
    CROSS_COMPILE   ?= arm-linux-
  


  make menuconfig 可以查看其CPU的的类型
   
 
export LANG=en_US.UTF-8
make
第一次编译报错
  1. arch/arm/kernel/unwind.c:34:2: error: #warning Your compiler is too buggy; it is known to not compile ARM unwind support.
  2. arch/arm/kernel/unwind.c:35:2: error: #warning Change compiler or disable ARM _UNWIND option.

因此准备换一个编译版本较高的编译器,换成4.5.1
有编译错误

  1. cc1: warnings being treated as errors
  2. init/main.c: In function 'do_one_initcall':
  3. init/main.c:706:10: error: 'calltime.tv64' may be used uninitialized in this function
 
这是未初始化三个变量
         ktime_t calltime, delta, rettime;
参考这里说明
 将代码更新成
  
  1. /* ktime_t calltime, delta, rettime;*/
  2.     707 DEFINE_KTIME(calltime);
  3.     708 DEFINE_KTIME(delta);
  4.     709 DEFINE_KTIME(rettime);

修正后又碰如下错误
  1. arch/arm/mm/alignment.c:716:21: error: 'offset.un' may be used uninitialized in this function
  union offset_union offset; 
将其修改为
  716         union offset_union offset = { .un = 0};   

结果又碰到

  1. kernel/async.c: In function 'async_thread':
  2. kernel/async.c:126:10: error: 'calltime.tv64' may be used uninitialized in this function
  3. kernel/async.c:126:10: note: 'calltime.tv64' was declared here
  4. kernel/async.c: In function 'async_synchronize_cookie_domain':
  5. kernel/async.c:282:10: error: 'starttime.tv64' may be used uninitialized in this function
原因同前,一样修改

又碰到leds
  1. drivers/leds/leds-microp.c: In function 'microp_led_jogball_brightness_set':
  2. drivers/leds/leds-microp.c:117:2: error: case value '1' not in enumerated type 'enum led_brightness'
  3. drivers/leds/leds-microp.c:121:2: error: case value '3' not in enumerated type 'enum led_brightness'
  4. drivers/leds/leds-microp.c:125:2: error: case value '7' not in enumerated type 'enum led_brightness'
  5. drivers/leds/leds-microp.c: In function 'microp_led_wimax_brightness_set':
  6. drivers/leds/leds-microp.c:163:2: error: case value '1' not in enumerated type 'enum led_brightness'
  7. drivers/leds/leds-microp.c:164:2: error: case value '2' not in enumerated type 'enum led_brightness'
  8. drivers/leds/leds-microp.c:165:2: error: case value '3' not in enumerated type 'enum led_brightness'
  9. drivers/leds/leds-microp.c:166:2: error: case value '4' not in enumerated type 'enum led_brightness'
  10. drivers/leds/leds-microp.c:167:2: error: case value '5' not in enumerated type 'enum led_brightness'
  11. drivers/leds/leds-microp.c:168:2: error: case value '129' not in enumerated type 'enum led_brightness'
  12. drivers/leds/leds-microp.c:169:2: error: case value '130' not in enumerated type 'enum led_brightness'
  13. drivers/leds/leds-microp.c:170:2: error: case value '131' not in enumerated type 'enum led_brightness'

查看include/linux/leds.h 只有如下定义
  1. enum led_brightness {
  2.     LED_OFF        = 0,
  3.     LED_HALF    = 127,
  4.     LED_FULL    = 255,
  5. };

增加定义

又碰到
  1. cc1: warnings being treated as errors
  2. drivers/md/dm.c: In function 'split_bvec':
  3. drivers/md/dm.c:1032:3: error: statement with no effect
  4. drivers/md/dm.c: In function 'clone_bio':
  5. drivers/md/dm.c:1060:3: error: statement with no effect
错误实在太多了,没办法只能将-Werror 选项去掉,
即将.config中的 注释掉
   CONFIG_FORCE_WARNING_AS_ERROR=y

  1. LD vmlinux
  2. SYSMAP System.map
  3. SYSMAP .tmp_System.map
  4. OBJCOPY arch/arm/boot/Image
  5. Kernel: arch/arm/boot/Image is ready
  6. AS arch/arm/boot/compressed/head.o
  7. GZIP arch/arm/boot/compressed/piggy.gz
  8. AS arch/arm/boot/compressed/piggy.o
  9. CC arch/arm/boot/compressed/misc.o
  10. LD arch/arm/boot/compressed/vmlinux
  11. OBJCOPY arch/arm/boot/zImage
  12. Kernel: arch/arm/boot/zImage is ready
  13. Building modules, stage 2.
  14. MODPOST 1 modules
  15. CC drivers/net/wireless/bcm4329_204/bcm4329.mod.o
  16. LD [M] drivers/net/wireless/bcm4329_204/bcm4329.ko
  17. [root@gz g8-buzz-2.6.32]# vi .config
  18. [root@gz g8-buzz-2.6.32]# vim Makefile
  19. [root@gz g8-buzz-2.6.32]# vim .config
  20. [root@gz g8-buzz-2.6.32]# vim Makefile
 
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP