標籤:
訊為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選項,則LEDS_CTL=1,否則為0.
同時平台檔案中的配置如下:
--編譯進核心
#ifdef CONFIG_LEDS_CTLstruct 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 LedTestPRODUCT_COPY_FILES += device/samsung/smdk4x12/apk/topeet/ledtest/ledtest.apk:system/app/ledtest.apkPRODUCT_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
---------------------------------------------<完>-------------------------------------------------
基於訊為4412開發板的Android開發流程