嵌入式系統(tǒng)項目報告_第1頁
嵌入式系統(tǒng)項目報告_第2頁
嵌入式系統(tǒng)項目報告_第3頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、 10嵌入式系統(tǒng)工程報告工程名稱:基于DM3730 的Android 系統(tǒng)Logo 移植工程開發(fā)目的本次工程爭辯和開發(fā)的主要目的如下:DM3730Android系統(tǒng)的啟動過程及其主要流程;Androidinit進程深入理解。移植 Android 系統(tǒng)啟動過程中的 Logo 和相關(guān)動畫;Android發(fā)的應(yīng)用程序。工程開發(fā)內(nèi)容本次工程需要完成的主要內(nèi)容有如下幾點:AndroidAndroid系統(tǒng)的軟件開發(fā)環(huán)境的搭建;EVM37xAndroid系統(tǒng)的硬件開發(fā)環(huán)境;Androidinitinit.rc文件簡潔解析;Android 系統(tǒng)啟動的動畫和 Logo 的修改;Android 系統(tǒng)桌面源碼的修改

2、,實現(xiàn)直接調(diào)入自己的應(yīng)用程序。工程開發(fā)軟硬件設(shè)備EVM板操作系統(tǒng):Android ICS4.0.3PC 端的開發(fā)平臺:Ubuntu11.04IDE :TICCS5.1工程開發(fā)流程工程開發(fā)前期預(yù)備Android源碼下載和編譯AndroidAndroid 開發(fā)所需的插件,編譯時所需的minicom終端等。sudo add-apt-repository “deb sudo add-apt-repository “deb HYPERLINK “ :/archive.canonical /“ :/archive.canonical / lucid partner“ sudo add-apt-reposi

3、tory “deb-src HYPERLINK “ :/archive.canonical /ubuntu“ :/archive.canonical /ubuntu lucidpartner“sudo apt-get updatesudo apt-get install git-core gnupg sun-java6-jdk flex bison gperf libsdl-devlibesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-devzlib1g-dev minicom tftpd uboot-mkimage e

4、xpectsudo update-java-alternatives -s java-6-sunrepo init -u git:/rowboat/manifest.git -m initrepo init -u git:/rowboat/manifest.git -m init -u git:/rowboat/manifest.git -m TI-Android-ICS-4.0.3-DevKit-3.0.0.xmlrepo sync./.repo/repo/repo synclocal-onlyAndroidx-loadeu-booLinux KernelexportPATH=source/

5、prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATHexportPATH=source/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATHx-loader編譯:make CROSS_COMPILE=arm-eabi- distcleanmake CROSS_COMPILE=arm-eabi- distcleanmake CROSS_COMPILE=arm-eabi- omap3evm_configmake CROSS_COMPILE=arm-eabi-make CROSS_COMPIL

6、E=arm-eabi- distcleanmake CROSS_COMPILE=arm-eabi- omap3_evm_configmake CROSS_COMPILE=arm-eabi-make CROSS_COMPILE=arm-eabi- distcleanmake CROSS_COMPILE=arm-eabi- omap3_evm_configmake CROSS_COMPILE=arm-eabi-make ARCH=arm CROSS_COMPILE=arm-eabi- distcleanmake ARCH=armCROSS_COMPILE=arm-eabi-omap3_evm_an

7、droid_defconfigmake ARCH=arm CROSS_COMPILE=arm-eabi- distcleanmake ARCH=armCROSS_COMPILE=arm-eabi-omap3_evm_android_defconfigmake TARGET_PRODUCT=omap3evm OMAPES=5.x -j8Android文件系統(tǒng)編譯:make TARGET_PRODUCT=omap3evm OMAPES=5.x -j8 PC 機的要求較高。cd /home/gzz/DM3730/source/out/target/product/omap3evmcp -r root

8、/* android_rootfs/cp -r system android_rootfscd /home/gzz/DM3730/source/out/target/product/omap3evmcp -r root/* android_rootfs/cp -r system android_rootfs././././build/tools/mktarball.shandroid_rootfs . rootfs rootfs.tar.bz2到此為止,整個 Android 系統(tǒng)的各個局部都編譯和制作完成。EVM板硬件環(huán)境的搭建Android 系統(tǒng)xloader、u-boot、Linux ke

9、rnel tftp 協(xié)議下載到LinuxNandFlash 上去。使用如下命令進展鏡像文件的燒錄:OMAP3_EVMOMAP3_EVM# tftp 0 x80000000 MLOOMAP3_EVM # nand erase 0 x0 0 x50000OMAP3_EVM #nandecc hw 2OMAP3_EVM# nand write 0 x80000000 0 x0 0 x50000為后續(xù)工程的順當(dāng)進展打下了良好的根底。Androidinitinit.rc文件的解析Android 中的內(nèi)核啟動后,kernel init,已經(jīng)被載入內(nèi)存,開頭之后,就通過啟動一個用戶級別的進程,完成系統(tǒng)的引導(dǎo)

10、。init 始終是第一個進程,位于/sbin/initinit.rc是 initAndroidAndroid 應(yīng)用程序最初始化的配置。由于它與 Android 有必要先對其進展理解和生疏。分析 init 進程需要結(jié)合 init.rc 進展,在這里主要通過分析局部代碼,做合理的解釋。Init Android system/core/init/init.c 下面,由于代碼過于浩大這里不在粘貼。1. uevent 進程if (!strcmp(basename(argv0), “ueventd“)return ueventd_main(argc, argv);argv 中的第一個參數(shù),比方/sbin/

11、ueventd,則basename 為ueventd。android 系統(tǒng)第一次啟動的進程名init,所以該函數(shù)ueventd_main 不執(zhí)行,該init 啟動service ueventd /sbin/ueventd 后,fork 出一個子進程, execve 啟動/sbin/ueventd 后,實際上該函數(shù)是對init 的符合鏈接,也就是ueventd 進程執(zhí)行起來后執(zhí)行的代碼還是init.c中的maimain函數(shù)。ueventd_main Linuxuevent 機制來治理設(shè)備的 熱插拔大事,給用戶空間權(quán)利來完成一些設(shè)備文件節(jié)點的創(chuàng)立。這種機制是建立socket 的通信機制上,用戶空間

12、和內(nèi)核驅(qū)動進展交互,具體的機制沒有去了解過。linux2.6 device_create 等時,會向用戶空間報uevent 大事,用戶空間由uevent 進程解析后去創(chuàng)立設(shè)備節(jié)點。2.init.rc 的解析INFO(“reading config filen“); init_parse_config_file(“/init.rc“);init.rc init_parse_config_file中進展解析。調(diào)用流程如下 init_parse_config_fileread_fileparse_config.parse_config源代碼略。通過對這個文件的解析,會啟動 Android 的應(yīng)用程序

13、,使得 Android 進Java的世界。AndroidLogo 和動畫移植3 Linux 內(nèi)核在啟 Linux Logo 圖標(biāo)的Android init 用戶進程啟動會調(diào)用函數(shù)完成一個圖片的顯示。三是 Android 系統(tǒng)中 Java bootanimation。Android啟動第一個 Logo 圖標(biāo)移植Android 系統(tǒng)是基于 Linux 內(nèi)核設(shè)計而成的, Linux Framebuffer)的概念來表示一個顯示接口,通俗理解就表示一塊 LCD。幀fbmem_init,在該函數(shù)中主要完成使用register_chrdev來注冊了一個名稱為fbclass_create在/sys/clas

14、sgraphics名目等。同樣的驅(qū)動加載中會調(diào)用硬LCDomapfb_init。這個函數(shù)會針對對個 fb,完成相關(guān)節(jié)點的創(chuàng)立在 /dev/graphics/fb0,fb1. fb_notifier_call_chain,函數(shù)通知fbconsoe理解為把握臺fbconsole來把握。而 Logo 的顯示啟動,就是在 fbcon_init 和 fbcon_switch 中來完成的。在fbcon_init fbcon_prepare_logo Logo 數(shù)據(jù)源,在Logo。本工程中需要將一張Jpg的圖片作為Logo樣式的圖標(biāo)顯示在LCD上面。實現(xiàn)的步驟如下:為了能讓這局部的 Logo 圖標(biāo)能夠正常顯

15、示,需要在編譯時對.config文件添加肯定的配置:CONFIG_FRAMEBUFFER_CONSOLECONFIG_FRAMEBUFFER_CONSOLE CONFIG_LOGOCONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARYLogo圖標(biāo)的函數(shù)不會執(zhí)行相關(guān)的操作。2.jpg圖標(biāo)的格式轉(zhuǎn)換。Linux 啟動圖標(biāo)格式不直接支持 jpg 格式,主要支持 ppmpbm 格式的圖像文件,因此需要先將圖像進展適當(dāng)?shù)霓D(zhuǎn)換: 2使用終端命令完成 convert xxx.jpg xxx.png png 格式# pngtopnm xxx.png xxx.pnm# pnmquan

16、t 224 xxx.pnm xxx224.pnm最終生成一張 xxxx224.pnm 格式的圖像文件。Linux內(nèi)核的源碼,具體的操作如下進展:添加如下內(nèi)容:obj-$(CONFIG_LOGO_ICS_CLUT224)+=logo_ics_clut224.添加如下內(nèi)容:#ifdef CONFIG_LOGO_ICS_CLUT224logo = &logo_ics_clut224;/gzz printk(“depth=%d,logo=logo_ics_clut224n“,depth);/by gzz#endif修改局部代碼讓圖片顯示在 LCD 在正中間Logo 圖標(biāo)的完全顯示。image.dx =

17、 0;image.dy=y;image.dx = (info-var.xres/2) -(logo-width/2); image.dy = (info-var.yres/2) -(logo-height/2); /by gzzimage.width = logo-width;/140image.height = logo-height;/153imageLogo這個坐標(biāo)上。這里可以通過修改這間。a,b.cLogo圖像顯示在自己的 LCD 上,給出一個良好的用戶效果。Android啟動其次個圖標(biāo)移植其次個圖標(biāo)的顯示主要和init進程有關(guān)系。在init進程中會有一個析如下:static int

18、console_init_action(int nargs, char *args)int fd;char tmpPROP_VALUE_MAX;if (console0) snprintf(tmp, sizeof(tmp), “/dev/%s“, console);console_name = strdup(tmp);fd = open(console_name, O_RDWR);if (fd = 0)have_console = 1;close(fd);if( load_565rle_image(INIT_IMAGE_FILE) ) fd = open(“/dev/tty0“, O_WRON

19、LY);if (fd = 0) const char *msg;msg = “n“n“n“n“n“n“n“/ console is 40 cols x 30 lines“n“n“n“n“n“n“n“A N D R O I D “;write(fd, msg, strlen(msg);close(fd);return 0;在文件/proc/cmdline 中。假設(shè)覺察內(nèi)核的啟動參數(shù)中包含有了一個名稱為“androidboot.console”console 中。這樣我們就可以通過設(shè)備文件/dev/來訪問系統(tǒng)的把握臺。假設(shè)內(nèi)核的啟動參數(shù)沒有包含名稱為“androidboot.console”的屬性

20、,那么默認(rèn)就通過設(shè)備文件/dev/console或者/dev/console,那么就說明系統(tǒng)支持訪問把握臺,have_console1。顯示其次個開機畫面。顯示其次個開機畫面是通過調(diào)用函數(shù) system/core/init/init.h文件中,如下所示:#define INIT_IMAGE_FILE “/initlogo.rle“565rle 的。rle 4 個字節(jié)來描述一個連續(xù)的具有一樣顏色值的序列。在rle565格式,前面 2 個字節(jié)用來描述一個具體的顏色,RGB5 位、6 5 位。initlogo.rle文件。預(yù)備一張png 格式的文件,使用Ubuntu 自帶的圖片轉(zhuǎn)換工具執(zhí)行如下命令:

21、convert -depth 8 android_logo.png rgb:android_logo.rawrgb2565android/out/host/linux-x86/bin 名目下(android為當(dāng)前源碼所在名目),轉(zhuǎn)換命令如下:rgb2565-rleandroid_logo.rawinitlogo.rle。通過以上步驟就完成了代碼的移植和圖片的制作,最終只需要將Android的文件系統(tǒng)下面,重啟動就可以看到圖片的正常顯示。Android啟動第三個動畫移植考慮到第三個啟動的動畫位于Android的Java因此只寫如何替換啟動動畫來實現(xiàn)我們預(yù)期的效果。第三個開機畫面是由應(yīng)用程序 bo

22、otanimation 來負(fù)責(zé)顯示的。應(yīng)用程序bootanimationinit.rc中被配置成了一個效勞,如下所示:.service bootanim /system/bin/bootanimationuser graphicsgroup graphicsdisabledoneshotgraphics。注disableinit進程在啟bootanimation SurfaceFlingerctl.startinit進程啟動應(yīng)ActivityManagerService ctl.stop init進程停頓Android bootanimation.zip 文件。內(nèi)容包括 png 格式文件,desc.txt里面是播放信息設(shè)置,其內(nèi)容和格式如下:480 720 15p 1 0 part1p 0 0 part2 800 是指顯示的區(qū)分率寬和高,15 是圖像播放的幀數(shù)。p 后面的數(shù)字分別指播放次數(shù) 0 和播放時間。Android系統(tǒng)啟動時會文件系統(tǒng)如下名目查找: #defineUSER_BOOTANIMATION_FILE

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論