久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久


嵌入式Android系統移植

分享到:
           

    Android系統移植工作的目的是為了在特定的硬件上運行Android系統,由于Android系統用的是linux內核,因此內核移植和嵌入式linux內核移(yi)植差異不大,過程(cheng)如下:

    (1)移(yi)植boot-loader和(he)linux2.6內核(he)到目標平臺上(shang),讓linux內核(he)可(ke)以啟動起(qi)來,基本的驅動允許(xu)正常(chang)。

    (2)修改內核配置文件,打開Android必須的驅動(日志和BINDER)如下:
    CONFIG_ANDROID=y
    CONFIG_ANDROID_BINDER_IPC=y
    CONFIG_ANDROID_LOGGER=y
    此(ci)部分(fen)的代碼在內核drivers/staging/android目錄下。

    (3)為了提高啟動速度,采(cai)用ramdisk,將android文件系(xi)統的(de)部分內(nei)容壓縮到內(nei)核中。

    首先打開內核驅動:
    CONFIG_BLK_DEV_INITRD=y
    CONFIG_INITRAMFS_SOURCE="root"
    CONFIG_INITRAMFS_ROOT_UID=0
    CONFIG_INITRAMFS_ROOT_GID=0

    然(ran)后在android源代碼編譯出來的out/target/product/merlin/root目錄復(fu)制(zhi)到內核(he)目錄下(xia)。

    (4)根據android文件系(xi)統的要求對nand flash進行重新分(fen)區,舉例如下:

    將nand flash分區以下8個分區
    NTIM
    OBM
    U-boot
    Kernel
    System
    UserData
    Mass Storage
    BBT

    (5)根據分區表修改內核啟動參數如下:
    CONFIG_CMDLINE="ubi.mtd=4 ubi.mtd=5 ubi.mtd=6 root=ubi0_0 rootfstype=ubifs console=ttyS1,115200 uart_dma init=/init"

    參數的意思(si)是:載(zai)入的文件系(xi)統(tong)部分(fen)有(you)3個分(fen)區(qu),分(fen)別為(wei)nand flash的第4,5,6分(fen)區(qu)(從0編號),文件系(xi)統(tong)采用ubifs格式(shi),控制臺(tai)設備(bei)為(wei)ttyS1,波特(te)率為(wei)115200

    啟動的第一(yi)個應用程(cheng)序是(shi)/init

    (6)確保控制臺的設置和硬件保持一致,如:硬件上串口用的是UART1,則內核啟動參數中設置有console=ttyS1,而且android的啟動過程中設要設置正確,修改部分位于android源代碼system/core/init/init.c文件中,
    將
        static char *console_name = "/dev/console";
    修改成
        static char *console_name = "/dev/ttyS1";

    (7)修(xiu)改android源(yuan)代碼system/core/rootdir目錄下(xia)的(de)init.rc文件(jian),作如(ru)下(xia)修(xiu)改(android默認yaffs2文件(jian)系統(tong)):

    首先將android文件系統修改成可讀寫,
    將
        mount rootfs rootfs / ro remount
    修改成
        mount rootfs rootfs / rw remount

    然后修改掛載system和userdata部分的代碼,
    將
        # Mount /system rw first to give the filesystem a chance to save a checkpoint
        mount yaffs2 mtd@system /system
        mount yaffs2 mtd@system /system ro remount
        # We chown/chmod /data again so because mount is run as root + defaults
        mount yaffs2 mtd@userdata /data nosuid nodev
        chown system system /data
        chmod 0771 /data
    改成
        # Mount /system rw first to give the filesystem a chance to save a checkpoint
        mount ubifs ubi0_0 /system ro
        # We chown/chmod /data again so because mount is run as root + defaults
        mount ubifs ubi1_0 /data nosuid nodev
        chown system system /data
        chmod 0771 /data

    (8)完成后編譯內(nei)核,可以啟動文件系(xi)統,控(kong)制臺可用,但是沒有顯(xian)示啟動log,而且(qie)不停的重啟。

    (9)系統不停的重啟,因此(ci)控制臺已經可用了(le),自然而然的想到看到logcat日志,一(yi)看,發現logcat設備居然沒起來,配(pei)置文件里面都(dou)定義了(le)

    居然(ran)沒(mei)(mei)起(qi)來,查看(kan)了下內核drivers/staging/android目錄(lu),沒(mei)(mei)有.o文(wen)件,證(zheng)明是沒(mei)(mei)編譯到(dao),在看(kan)內核目錄(lu)下的.config文(wen)件,發現居然(ran)沒(mei)(mei)有了

    ;logcat和binder的宏(hong)定(ding)義,配置文(wen)件(jian)里(li)面有定(ding)義而.config文(wen)件(jian)中無定(ding)義,肯定(ding)是相(xiang)關Kconfig文(wen)件(jian)的問題,通(tong)過(guo)分(fen)析drivers/staging目錄下的

    Kconfig文件(jian)(jian)發現是(shi)因為STAGING_EXCLUDE_BUILD宏默認是(shi)y,在配置文件(jian)(jian)中否定此宏即(ji)可,在配置文件(jian)(jian)中CONFIG_STAGING定義(yi)后加上(shang)即(ji)可,如(ru)下:

    CONFIG_STAGING=y
    # CONFIG_STAGING_EXCLUDE_BUILD is not set

    修(xiu)改(gai)后重新編譯發現系統完(wan)成(cheng)正常(chang)(chang)啟動(dong),啟動(dong)過程中(zhong)啟動(dong)log也顯示正常(chang)(chang)。

    至此,android初(chu)步(bu)移植工作已經完成,當然,系統還有很多問題(ti),需要下一(yi)步(bu)繼續修改。

    android系統移植流程小結:

    (1)android linux內核的普(pu)通驅動(dong)移植(zhi),讓(rang)內核可以在目標平臺上運行起來(lai)。

    (2)正(zheng)確(que)(que)掛載文(wen)件系統,確(que)(que)保內(nei)核啟(qi)動(dong)參(can)數和(he)android源代碼system/core/rootdir目(mu)錄下的init.rc中的文(wen)件系統掛載正(zheng)確(que)(que)。

    (3)調(diao)試控制臺,讓內核啟動(dong)參(can)數(shu)中(zhong)的console參(can)數(shu)以及android源代碼system/core/init/init.c中(zhong)的console_name設置(zhi)和(he)硬件保持(chi)一致(zhi)

    (4)打開(kai)android相關的驅動(logger,binder等),串(chuan)口輸(shu)入(ru)logcat看(kan)logger驅動起來,沒(mei)有的話調試(shi)logger驅動。(ARM的內(nei)核配置文件(jian)定義在內(nei)核arch/arm/configs目錄下。)


   熱點鏈接:

   1、嵌入式Linux串口編程基礎
   2、嵌入式Linux內核如何編譯
   3、Android 4.2.2都有哪些改進
   4、三種常見的FPGA結構
   5、DSP管理器是什么

更多新聞>>