嵌入式目标机上的代码研究

    技术2022-05-18  20

    Part 1 Android编译后目录研究 

    编译完成Android系统后,生成的结果全部在根目录的out目录中,原始的各个工程不会改动。

    out目录的结构如下所示:

     

    out / |-- host                      [主机内容] |   |-- common                  [主机的通用内容] |   |   |-- obj |   |-- linux - x86               [编译所生成的主机Linux上运行的工具] |       |-- bin |       |-- framework |       |-- lib |       |-- obj |-- target                     [目标机内容]    |-- common                  [目标机的通用内容]    |   |-- R    |   |-- docs    |   |-- obj    |-- product                 [目标机的产品目录]       |-- generic                 out / target / product / generic中存放目标产品,默认情况下作为目标产品的名称out / target / product / generic |-- android - info.txt |-- clean_steps.mk |-- data                   [数据目录] |-- obj                    [中间目标文件记录] |   |-- APPS                [Java应用程序包] |   |-- ETC                 [运行时配置文件] |   |-- EXECUTABLES         [可执行程序] |   |-- KEYCHARS             |   |-- NOTICE.html |   |-- NOTICE.html.gz |   |-- NOTICE_FILES |   |-- PACKAGING |   |-- SHARED_LIBRARIES    [动态库(共享库)] |   |-- STATIC_LIBRARIES    [静态库(归档文件)] |   |-- include |   |-- lib |-- previous_build_config.mk |-- ramdisk.img            [根文件系统映像] |-- root                   [根文件系统目录] |-- symbols                [符号的目录] |-- system                 [主文件系统目录] |-- system.img             [主文件系统映像] |-- userdata - qemu.img      [QEMU的数据映像] |-- userdata.img           [数据映像]

    其中root、system、data三个目录分别是目标根文件系统,主文件系统和数据文件系统的目录,后缀名为.img的文件分别为它们所对应的映像文件。

     

    Part 2 运行Android 

     

    编译后,运行模拟器:

     

    $ declare  - x ANDROID_PRODUCT_OUT = " {Android root}out/target/product/generic“  $. / out / host / linux - x86 / bin / emulator  - shell  

     

     

    Android系统启动后,可以用ls -l 命令查看系统根目录: #  ls -l drwxrwxrwt root     root               2010 - 03 - 12   19 : 26  sqlite_stmt_journalsdrwxrwx ---  system   cache              2010 - 03 - 12   12 : 22  cached ---------  system   system             2010 - 03 - 12   19 : 26  sdcardlrwxrwxrwx root     root               2010 - 03 - 12   19 : 26  etc  ->   / system / etcdrwxr - xr - x root     root               2010 - 03 - 12   10 : 38  systemdrwxr - xr - x root     root               1970 - 01 - 01  0 8 : 00  sysdrwxr - x ---  root     root               1970 - 01 - 01  0 8 : 00  sbindr - xr - xr - x root     root               1970 - 01 - 01  0 8 : 00  proc - rwxr - x ---  root     root          9075   1970 - 01 - 01  0 8 : 00  init.rc - rwxr - x ---  root     root          1677   1970 - 01 - 01  0 8 : 00  init.goldfish.rc - rwxr - x ---  root     root        106568   1970 - 01 - 01  0 8 : 00  init - rw - r -- r --  root     root           118   1970 - 01 - 01  0 8 : 00  default.propdrwxrwx -- x system   system             2010 - 03 - 12   12 : 22  datadrwx ------  root     root               1970 - 01 - 01  0 8 : 00  rootdrwxr - xr - x root     root               2010 - 03 - 12   19 : 26  dev

    sqlite_stmt_journals:

    cache : 是缓存临时文件夹,据说是除了T-mobile的OTA更新外,别无用处。

    sdcard:是SD卡中的FAT32文件系统挂载的目录。

    etc :指向 /system/etc ,配置文件存放目录。

    system :是一个很重要的目录,系统中的大部分东西都在这里

    sys :用于挂载 sysfs文件系统。 在设备模型中,sysfs文件系统用来表示设备的结构.将设备的层次结构形象的反应到用户空间中.用户空间可以修改sysfs中的文件属性来修改设备的属性值

    sbin: 只放了一个用于调试的adbd程序。

    proc :/proc 文件系统下的多种文件提供的系统信息不是针对某个特定进程的,而是能够在整个系统范围的上下文中使用。

    data :存放用户安装的软件以及各种数据。

    root :什么都没有。

    dev :设备节点文件的存放地。

     

    Android根目录中主要文件夹与目标系统的out/target/product/generic/root内容相对应,此外etc,proc等目录是在启动后建立的。

    system映像被挂载到根文件系统的system目录下,data映像被挂接到根文件系统的data目录中。

     

    Part 3 Android root  

    对于Android根文件系统的获取,赵瑞甲同学的wiki中已经讲述的很清楚,ramdisk.img是模拟器的文件系统,将ramdisk.img复制一份到任何其他目录下,将其名称改为ramdisk.img.gz,并使用命令 gunzip ramdisk.img.gz

     

     然后新建一个文件夹,叫ramdisk吧,进入,输入命令

    cpio  - - F .. / ramdisk.img

     

    这下,就能看见并操作ramdisk里面的内容了。

    根据自己的需要对里面的内容修改之后,可以使用下列命令重新打包成镜像。

    cpio  - - - F .. / ramdisk.img  >  list cpio  - - H newc  - O lk.img  <  list 

     

     当前目录下生成的lk.img就是我们的新镜像了。


    最新回复(0)