基於訊為4412開發板的Android開發流程


 

訊為4412開發板  使用三星2410芯片,基於arm9架構,由於自己電腦硬件的局限,只能跑Android4.0.3系統。

 

1、Uboot這個直接使用官方鏡像燒寫就可以了,一般情況不用去重復燒寫。

  略。

  燒寫命令:fastboot.exe flash bootloader u-boot-iTOP-4412.bin

2、linux Kernel

  1)設備驅動

    --字符設備驅動

    --雜項設備驅動

    --I2C設備驅動(兩種模式

      a,linux內部i2c體系

        包括兩部分:i2c設備驅動與i2c總線驅動,總線驅動在kernel里已經存在了,設備驅動請自己寫。

        在這里不得不吐槽一下4412開發板,雖然有7個i2c接口,但是只有兩個外接!i2c6與i2c7,i2c7外掛的是觸摸驅動,應該不能繼續外掛其他設備了,因為i2c總線同一時間只能響應一個設備,所以能用的只有i2c6,可惜我使勁了好久,依舊不能request到總線,一直總線忙,return-110 。

      b,使用gpio模擬i2c時序

        模擬i2c需要注意芯片的i2c時序,否則會得不到ack!!這種方法可以使用雜項設備進行注冊,驅動和雜項設備驅動類似。

 

  2)注冊到kernel中(平台文件:arch/arm/mach-exynos/mach-itop4412.c

    --字符類設備

       首先聲明設備信息,注意里面的.name變量,這個name變量需要和驅動里的.name相同,這樣才能順利進入probe函數中。

struct platform_device s3c_device_XXX ={
        .name   = "match-name",
        .id             = -1,
};

      然后在platform_device *smdk4x12_devices[] __initdata函數中注冊,這樣一個字符類設備就注冊成功了。

&s3c_device_XXX,

      補上設備驅動里需要的匹配信息

struct platform_driver XXX_driver = {
    .probe = XXX_probe,
    .remove = XXX_remove,
    .shutdown = XXX_shutdown,
    .suspend  = XXX_suspend,
    .resume = XXX_resume,
    .driver = {
        .name = match-name,  //這個.name就是需要匹配的項
        .owner = THIS_MODULE,
    }
};

 

    --i2c驅動

      首先需要確定沒有其他驅動占用該i2c總線,以i2c7為例:

static struct i2c_board_info i2c_devs7[] __initdata = {

#ifdef CONFIG_TOUCHSCREEN_TSC2007
    {
        I2C_BOARD_INFO("tsc2007", 0x48),    //匹配項,從設備地址(讀寫addr>>1)
        .type        = "tsc2007",
        .platform_data    = &tsc2007_info,
        .irq = IRQ_EINT(0),
    },
#endif

};

      平台文件已經在init函數里注冊好了,所以就只要添加自己的設備名就ok了。

 

  3)編譯

    a,編譯進kernel

      打開驅動所在目錄下的Makefile和Kconfig文件,以leds點燈為例

      --Makfile

      在最后添加obj-$(CONFIG_LEDS_CTL)        += itop4412_leds.o,生成itop4412_leds.o文件。

      --Kconfig

      在最后添加如下信息:

config LEDS_CTL
        bool "Enable LEDS config"
        default y
        help
          Enable LEDS config

    b,以模塊編譯

      Makefile文件如上。

      Kconfig文件更改如下:

config LEDS_CTL
        tristate "Enable LEDS config"
        default y
        help
          Enable LEDS config

    配置信息編寫完畢,在Ubuntu里使用make menuconfig命令進入內核配置

    選中Enable LEDS config選項,則CONFIG_LEDS_CTL=1,否則為0.

    同時平台文件中的配置如下:

    --編譯進內核

#ifdef CONFIG_LEDS_CTL
struct platform_device s3c_device_leds_ctl = {
        .name   = "leds",
        .id             = -1,
};
#endif

    --以模塊編譯

#if defined(CONFIG_LEDS_CTL) || defined(CONFIG_LEDS_CTL_MODULE)
struct platform_device s3c_device_leds_ctl = {
        .name   = "leds",
        .id             = -1,
};
#endif

    注意這兩個還是有一點區別的。

 

  3)更改linux啟動圖片

    使用image2Lcd軟件把一個bmp圖片轉換成一個數組

    更改drivers/video/samsung/ iTop-4412.h文件中的第二個數組內容,ok!

    如果只要顯示文字,那么圖片的背景請設置為黑色:#ffffff

 

  最后執行make命令就ok了。

  會生成一個zImage文件:arch/arm/boot/zImage

  燒寫命令:fastboot.exe flash kernel zImage

 

 3、Android系統編譯

    1)訪問設備節點的權限

      打開device/samsung/smdk4x12/conf/init.smdk4x12.rc

      在最后增加chmod 0777 xxx,保存退出。

      注意!!這個文件最后會打包到ramdisk_uboot.img中,所以在燒寫system的時候需要同時燒寫,否則更改失敗。

    2)APP開機自啟

      打開device/samsung/smdk4x12/device.mk,以leds為例

#Install LedTest
PRODUCT_COPY_FILES += \
        device/samsung/smdk4x12/apk/topeet/ledtest/ledtest.apk:system/app/ledtest.apk
PRODUCT_COPY_FILES += \
        device/samsung/smdk4x12/apk/topeet/ledtest/libled.so:system/lib/libled.so

      注釋:注意路徑問題,並且把文件下載到相應的目錄下,即.apk與.so文件都位於device/samsung/smdk4x12/apk/topeet/ledtest目錄下。

 

    3)更改android啟動時顯示的logo

      這里我就有點取巧啦,直接更改圖片資源:frameworks/base/core/res/assets/images

      該目錄下有兩個文件,android-logo-mask.png這個就是android的啟動時顯示的圖片。

 

  使用./build_android.sh命令編譯Android

  最后會生成system鏡像:位於out/target/product/smdk4x12目錄下的system.img與ramdisk_uboot.img文件。

  燒寫命令:fastboot.exe flash system system.img / fastboot.exe flash ramdisk ramdisk-uboot.img

 

最后重啟:fastboot reboot

 

---------------------------------------------<完>-------------------------------------------------

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM