Android系统移植(三)

来源:互联网 发布:以史为鉴 可以知兴替 编辑:程序博客网 时间:2024/05/17 09:29

上节当中只是简单的介绍了下系统镜像的制作过程,但是在这之前还需要更重要的两步:源码编译和内核编译。这两步的正确与否关乎Android能否正常运行。因此,下面来介绍源码编译和内核编译需要注意的问题.

1. 源码编译

a) .   setenv     中间有空隔,且必须执行这条 

b) make

在源码编译过程中,a步骤必须执行,这是友善之臂提供的配置信息,若不执行会导致生成的文件缺失,而造成Android4.2.2不能正常在TINY4412上正常运行。

在源码编译过程中可能会出现一个严重错误:

1.1        make: *** 没有规则可以创建“out/target/product/generic/obj/SHARED_LIBRARIES/gralloc.generic_intermediates/import_includes”需要的目标“out/target/product/generic/obj/SHARED_LIBRARIES/libMali_intermediates/export_includes”。 停止。

解决办法:

cp vendor/friendly-arm/exynos4412/mali_dmabuf/*out/target/product/generic/obj/lib/

在SHARED_LIBRARIES目录下mkdir libMali_intermediates

然后在libMali_intermediates目录下touch export_includes

1.2        external/bluetooth/bluedroid/Android.mk:8:NO BOARD_BLUETOOTH_BDROID_BUILDCFG_INCLUDE_DIR, using only genericconfiguration

Exception in thread "main" java.lang.UnsatisfiedLinkError:Cannot load 32-bit SWT libraries on 64-bit JVM

该错误是由于<android_home>/out/host/linux-x86/framework/目录下的swt.jar是32位引起的,下载个64位的复制到该目录下

其他错误的解决方法请自行百度,这里不再赘述。

2. 内核编译

(1).未测试

1.启动android模拟器,然后通过adb转到模拟器中提供的内核配置文件:

  emulator &

  adb pull /proc/config.gz .

此时adb工具会连接到模拟器,并从它里面下载一个叫做config.gz的文件到你的当前目录下,将它拷贝到<kernel_home> 目录下

2.gunzip config.zip

 mv config .config

3.打开<kernel_home>目录下的Makefile文件,修改CROSS_COMPILE=arm-none-linux-gnueabi-

在Makefile中注释掉LDFLAGS_BUILD_ID这个变量。

因为android不支持这个选项 --build-id

4.make

(2).正确

1.cp tiny4412_android_config .config

2.make

 

 

最后用成功SD卡成功引导Android系统-----shell

但是屏幕不能正常显示?  

猜想:是驱动的问题么?

此方式是自己编译linux内核,但是注意:由于该linux内核默认采用高清屏幕HD700,所以需要改linux内核源码,修改<linux_home>/arch/arm/mach-exynos目录下的tiny4412-lcds.c文件,该文件中tiny4412_lcd_config[lcd_idx].ctp,默认的lcd_idx定义为static int lcd_idx = 0;但是tiny4412_lcd_config结构体中第0个是高清屏HD700,而不是我用的S70,所以改变该变量为1,即标清屏S70。

总结:既然屏幕能显示,应该不是驱动的问题,若是驱动的问题应该就不能显示或显示错误。显示桌面是乱的说明是驱动的配置问题。对驱动工作原理还没理解透。

 

又出现新问题:触摸屏不能正常工作

猜想:是不是由于linux内核的触摸屏驱动没有配置好?

但是看到device drivers---->

           input devicesupport--->

                Touchscreens下的

          <*>  Tiny4412 1-Wire host and Touch Screen Driver 

             <*>   FocalTech ft5x0x TouchScreen driver

           Graphicssupport---->

          [*] Enable firmware EDID   //要选中这个触摸屏才能正常,原因?

重启电源,触摸屏能正常工作了。

另外一个需要注意的问题是:如果用的是uboot则配置linux内核禁止Trustzone

system type--->

-------[]Support TrustZone-enabledTrusted Execution Environment

如果用的是 superboot,则必须加载该模块。

 

 未完待续!

0 0