實現Android init中對屬性作為參數的寫入操作

來源:互聯網
上載者:User

田海立@CSDN

2013-3-31

 

事情的由來:Android很多系統的adb id是固定的,驅動一旦寫好每個裝置的id都是一樣。有些需求要求adb的id每個裝置都不同。

adb id即是通過命令adb devices查看到的裝置的id。

這在Android4.0中已經實現,而實現的要點如下:

1.      核心的Adb usb驅動中暴露出介面/sys/class/android_usb/android0/iSerial,可供應用寫入具體的id數值;

2.      手機中的sn號是裝置的識別號,而且有一個屬性值(ro.serialno)來記錄,可用來作為區分adbid的標誌;

Sn號也在系統啟動的init裡通過kernel傳了過來

3.      在系統啟動階段(propertyservice已經啟動並可用,boot階段應是不錯的選擇,所以可寫在init.rc的on bootsection)寫入:

write /sys/class/android_usb/android0/iSerial ${ro.serialno}

4.      Write是init解析init.rc已經支援的命令,但是不支援屬性作為參數。

 

本文著重講述如何仿照Android4.0在較低版本中也支援屬性作為write的參數。

 

1.      /system/core/init/int_parser.h中添加expand_props()的原型定義

int expand_props(char *dst, const char *src, int len);

2.      /system/core/init/int_parser.c中從Android 4.0中移植expand_props()的實現。

expand_props()主要實現了對‘$’包括的屬性的解析:遇到$(prop)時,直接轉化為擷取屬性值。

因為expand_props()也用到了push_chars(),push_chars()也一併移植過來。

3.      /system/core/init/builtins.c中移植do_write()函數的實現。

do_write()也就是init.rc指令碼中的write命令的實現。

 

把原來實現:

int do_write(int nargs, char **args){    returnwrite_file(args[1], args[2]);}

 

改成

int do_write(int nargs, char **args){    constchar *path = args[1];    constchar *value = args[2];    charprop_val[PROP_VALUE_MAX];    intret;     ret =expand_props(prop_val, value, sizeof(prop_val));    if(ret) {       ERROR("cannot expand '%s' while writing to '%s'\n", value,path);       return -EINVAL;    }    returnwrite_file(path, prop_val);}

就可實現對init.rc中write指令中$(prop)的解析。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.