主题 : 請問Android的make基本觀念 复制链接 | 浏览器收藏 | 打印
级别: 圣骑士
UID: 44407
精华: 0
发帖: 386
金钱: 1945 两
威望: 389 点
综合积分: 772 分
注册时间: 2011-04-25
最后登录: 2014-08-25
楼主  发表于: 2011-10-19 13:36

 請問Android的make基本觀念

如題,我先make mini6410的image

事後我修改BoardConfig.mk 支援wifi及bluetooth,也有 正确編譯tool,但是請問如果我想包在rootfs的image,是不是先必須要make clean, 再make
還是直接make,我修改的部份就會加到roofs的image。

例如:

在 build/target/board/generic/BoardConfig.mk 中添加:
BOARD_HAVE_WIFI := true
BOARD_WPA_SUPPLICANT_DRIVER := WEXT
  
這將在external/wpa_supplicant/Android.mk設置WPA_BUILD_SUPPLICANT為true,
默認使用驅動driver_wext.c。

如果使用定制的wpa_supplicant驅動(例如 madwifi),可以設置:
BOARD_WPA_SUPPLICANT_DRIVER := MADWIFI

將在external/wpa_supplicant/common.c 中的MSG_INFO,改為MSG_DEBUG以增加輸出更多信息

wpa_debug_level = MSG_DEBUG;

#define wpa_printf宏中的
if ((level) >= MSG_INFO)
改為
if ((level) >= MSG_DEBUG)

external\wpa_supplicant\.config

# CONFIG_NO_WPA=y
CONFIG_OS=unix
CONFIG_IEEE8021X_EAPOL=y
CONFIG_EAP_MD5=y
CONFIG_EAP_MSCHAPV2=y
CONFIG_EAP_TLS=y
CONFIG_EAP_PEAP=y
CONFIG_EAP_TTLS=y
CONFIG_EAP_GTC=y
CONFIG_EAP_OTP=y
CONFIG_EAP_SIM=y
CONFIG_EAP_AKA=y
CONFIG_EAP_PSK=y
CONFIG_EAP_SAKE=y
CONFIG_EAP_GPSK=y
CONFIG_EAP_PAX=y
CONFIG_EAP_LEAP=y
CONFIG_PKCS12=y
CONFIG_SMARTCARD=y
CONFIG_WIRELESS_EXTENSION=y
CONFIG_CTRL_IFACE=y
CONFIG_DRIVER_WEXT=y

hardware/libhardware_legacy/wifi/wifi.c
將驅動直接編譯進內核
int wifi_load_driver()
{
char driver_status[PROPERTY_VALUE_MAX];
int count = 100; /* wait at most 20 seconds for completion */
LOGE("wifi driver loaded !");
return 0;
}
int wifi_unload_driver()
{
int count = 20; /* wait at most 10 seconds for completion */
LOGE("wifi driver unloaded by rockie!");
return 0;
注意這個定義static const char IFACE_DIR[] = "/data/system/wpa_supplicant";

編譯整個android系統,確認編譯完bin目錄中含有wpa_supplicant、wpa_cli



這個是我查到apk事後加入image的部份:


产品出厂时需一些软件,如测试程序、自主开发的APK或第三方的APK,这样我们就有必要把这些APK程序打包到文件系统里编译生成镜像了,具体操作如下:


1  (1)源码编译后,把apk拷贝到out/target/product/generic/system/app中。

    (2) 执行命令make snod , 把添加的spk编到system.img 中

   缺点:执行make clean 后,再次make 完毕需要重新执行上面操作。

2  "方法一"的改进。

    (1) 新建一个文件夹目录,用来存放apk文件

             mkdir packages/apps/Prebuilt_apps

             cd packages/apps/Prebuilt_apps

             在Prebuilt_apps中新建make文件

             vi Android.mk

             并写入

             LOCAL_PATH := $(call my-dir)

             include $(CLEAR_VARS)

             LOCAL_POST_PROCESS_COMMAND := $(shell cp -r $(LOCAL_PATH)/*.apk $(TARGET_OUT)/app/)

             保存退出。

    (2) 把需要编译的apk拷贝到目录Prebuilt_apps下,执行make ,Prebuilt_apps中的apk就会考被到out/target/product/generic/system/app中。

     (3) 执行make snod 。完成。

    此方法执行make clean 后,再次make 完毕,只需要make snod即可(有时make后,out/target/product/generic/system/app没有需要添加的apk,此时再make一次即可,速度很快)。
[ 此帖被kazaya在2011-10-19 13:42重新编辑 ]