android開源項目向arm2410實驗箱上的移植_第1頁
android開源項目向arm2410實驗箱上的移植_第2頁
android開源項目向arm2410實驗箱上的移植_第3頁
android開源項目向arm2410實驗箱上的移植_第4頁
android開源項目向arm2410實驗箱上的移植_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Android開源項目向博創(chuàng)2410實驗箱上的移植 Team972010年05月結(jié)題答辯1Team97項目小組簡介姓名學號項目分工角色趙瑞甲SA092254701、初始化分析2、根文件系統(tǒng)移植組長楊揚SA092252711、總體技術(shù)支持2、vivi修改3、Linux內(nèi)核移植4、網(wǎng)卡驅(qū)動移植組員劉曉輝SA092254471、開發(fā)環(huán)境搭建Linux&Windows2、應用程序開發(fā)組員劉洋SA092253471、驅(qū)動移植分析2、LCD移植組員吳秋冬SA092254411、驅(qū)動移植分析2、觸摸屏驅(qū)動移植組員2Team97項目小組簡介需求分析知識儲備開發(fā)環(huán)境搭建概要設(shè)計Linux內(nèi)核及vivi源碼修改應

2、用程序開發(fā)定制生成根文件系統(tǒng)移植網(wǎng)卡驅(qū)動移植LCD驅(qū)動移植觸摸屏驅(qū)動趙瑞甲FCFCF楊揚CCCCFCF劉曉輝CFFCF劉洋CCCCCFC吳秋冬CCCCCF3主要內(nèi)容項目概述項目意義項目步驟項目演示項目總結(jié)參考文獻4項目概述掌握s3c2410開發(fā)板及ARM處理器的結(jié)構(gòu)、功能和應用理解Linux內(nèi)核知識熟悉Android操作系統(tǒng),了解其工作原理,掌握操作系統(tǒng)移植工作流程熟悉Linux驅(qū)動移植相關(guān)知識熟悉Android操作系統(tǒng)的應用開發(fā)5項目意義Google公司于2007年 11月5日推出的基于Linux平臺的開源手機操作系統(tǒng),是首個為移動終端打造的真正開放和完整的移動軟件。6項目意義Android

3、的應用手機領(lǐng)域7項目意義 Android的應用其他領(lǐng)域機頂盒VOIP電話KTV點唱機數(shù)字相框電視機8項目步驟準備開發(fā)環(huán)境:WindowsXP & RadHat9.0BootLoader: viviLinux內(nèi)核:linux-2.6.25-android-1.0_r1.tar.gz 交叉編譯工具:arm-linux-none-gnueabi目標開發(fā)板:博創(chuàng)S3C2410開發(fā)板9項目步驟vivi的修改移植vivi的修改移植及原理10NAND Flash 分區(qū)使用vivi重建NAND Flash MTD分區(qū)為何重分區(qū)?vivi的MTD分區(qū)表:分區(qū)前:vivi part show mtdpart in

4、fo. (6 partitions) name offset size flag - vivi: 0 x00000000 0 x00020000 0 128kparam: 0 x00020000 0 x00010000 0 64kkernel : 0 x00030000 0 x00400000 0 1Mroot : 0 x00430000 0 x00300000 4 3Muser : 0 x00730000 0 x03800000 0 59Mucos: 0 x03f30000 0 x000cc000 0 816k 11項目步驟vivi的修改移植Linux2.6的內(nèi)核為何會變大?12項目步驟vi

5、vi的修改移植make時加上V=1參數(shù),可得vmlinux的鏈接命令如下:/home/yang/yangdroid/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-ld -EL -p -no-undefined -X -o vmlinux -T arch/arm/kernel/vmlinux.lds arch/arm/kernel/head.o arch/arm/kernel/init_task.o init/built-in.o -start-group usr/built-in.o arch/arm/kernel/built

6、-in.o arch/arm/mm/built-in.o arch/arm/common/built-in.o arch/arm/mach-s3c2410/built-in.o arch/arm/mach-s3c2400/built-in.o arch/arm/mach-s3c2412/built-in.o arch/arm/mach-s3c2440/built-in.o arch/arm/mach-s3c2442/built-in.o arch/arm/mach-s3c2443/built-in.o arch/arm/nwfpe/built-in.o arch/arm/plat-s3c24x

7、x/built-in.o kernel/built-in.o mm/built-in.o fs/built-in.o ipc/built-in.o security/built-in.o crypto/built-in.o block/built-in.o arch/arm/lib/lib.a lib/lib.a arch/arm/lib/built-in.o lib/built-in.o drivers/built-in.o sound/built-in.o net/built-in.o -end-group .tmp_kallsyms2.o13項目步驟vivi的修改移植14項目步驟vivi

8、的修改移植如何使用vivi進行分區(qū)?15項目步驟vivi的修改移植修改arch/s3c2410/smdk.c,將結(jié)構(gòu)體數(shù)組default_mtd_partitions修改如下:mtd_partition_t default_mtd_partitions = name: “vivi”, offset: 0, size: 0 x00020000, flag: 0 , name: param, offset: 0 x00020000, size: 0 x00010000, flag: 0 , name: kernel, offset: 0 x00030000, size: 0 x00400000,

9、flag: 0 , name: root, offset: 0 x00430000, size: 0 x00300000, flag: MF_BONFS, name: user, offset: 0 x00730000, size: 0 x03800000, flag: 0 , name: ucos, offset: 0 x03f30000, size: 0 x000cc000, flag:0 ;這里還可以修改字符數(shù)組char linux_cmd的初始值,這是vivi傳遞給linux內(nèi)核的默認啟動參數(shù)。為了靈活性,我們選擇在vivi命令行中將linux內(nèi)核的啟動參數(shù)傳遞給內(nèi)核。16項目步驟vi

10、vi的修改移植 vivi如何使用MTD分區(qū)表?17項目步驟vivi的修改移植MTD為raw flash設(shè)備提供了一個抽象層,它使我們可以使用同一套API來操作不同的flash設(shè)備(NAND, OneNAND, NOR, AG-AND, ECCd NOR等)vivi通過其內(nèi)部的維護的flash分區(qū)表來管理flashvivi要求,在燒寫flash時,使用分區(qū)名來指定燒寫的目標地址 如:load flash kernel x 表示使用xmodem協(xié)議通過串口將數(shù)據(jù)下載到flash的kernel分區(qū)系統(tǒng)啟動時,vivi會將kernel分區(qū)中的所有內(nèi)容拷貝到RAM中的指定位置(0 x30008000地址

11、處,該地址由vivi中的boot_mem_base + LINUX_KERNEL_OFFSET 決定),然后跳轉(zhuǎn)到該位置執(zhí)行那里的代碼Linux內(nèi)核也維護了一張Flash MTD分區(qū)表,我們使Linux內(nèi)核的分區(qū)表與vivi的保持一致,并且使用vivi將linux根文件系統(tǒng)燒寫至flash的root分區(qū);這樣,在linux內(nèi)核的啟動參數(shù)中需使用root=/dev/mtdblock3告訴linux內(nèi)核在3號mtd分區(qū)即root分區(qū)尋找根文件系統(tǒng)18項目步驟vivi的修改移植分區(qū)后:vivi part show mtdpart info. (6 partitions) name offset si

12、ze flag - vivi: 0 x00000000 0 x00020000 0 128kparam: 0 x00020000 0 x00010000 0 64kkernel : 0 x00030000 0 x00400000 0 4Mroot : 0 x00430000 0 x00300000 4 3Muser : 0 x00730000 0 x03800000 0 56Mucos: 0 x03f30000 0 x000cc000 0 816k 19項目步驟Linux內(nèi)核移植20項目步驟LCD驅(qū)動移植Framebuffer框架圖21項目步驟LCD驅(qū)動移植FrameBuffer框架介紹LCD

13、是圖形硬件設(shè)備,F(xiàn)ramebuffer 設(shè)備是圖形硬件設(shè)備的抽象層,它描述視頻硬件的幀緩沖區(qū),提供一組非常方便的應用軟件訪問圖形硬件的接口。在Linux系統(tǒng)下,F(xiàn)rameBuffer的主要的結(jié)構(gòu)如上圖所示。Linux為了開發(fā)FrameBuffer程序的方便,使用了分層結(jié)構(gòu)。fbmem.c處于Framebuffer設(shè)備驅(qū)動技術(shù)的中心位置。它為上層應用程序提供系統(tǒng)調(diào)用,也為下一層的特定硬件驅(qū)動提供接口;那些底層硬件驅(qū)動需要用到這兒的接口來向系統(tǒng)內(nèi)核注冊它們自己。 底層的驅(qū)動的工作就是對fbmem.c中的結(jié)構(gòu)體fb_info的成員變量等進行填充,并通過register_framebuffer() 函

14、數(shù)注冊到名稱為registered_fbFB_MAX的全局數(shù)組數(shù)組中 ,其中的數(shù)組下標 為設(shè)備的次設(shè)備號。22項目步驟LCD驅(qū)動移植調(diào)用過程23項目步驟LCD驅(qū)動移植調(diào)用過程介紹 當用戶打開一個FrameBuffer設(shè)備的時,也就是打開dev目錄下的設(shè)備文件fb時,將調(diào)用這里的fb_open()函數(shù)。傳進來的inode就是預打開設(shè)備的設(shè)備號,包括主設(shè)備和次設(shè)備號。fb_open函數(shù)首先通過iminor()函數(shù)取得次設(shè)備號,然后查全局數(shù)組registered_fbFB_MAX得到設(shè)備的fb_info信息,而這里面存放了設(shè)備的操作函數(shù)集fb_ops。這樣,我們就可以調(diào)用具體驅(qū)動來實現(xiàn)相關(guān)的操作24

15、項目步驟LCD驅(qū)動移植S3c2410 LCD修改步驟 修改文件: /kernel.git/arch/arm/mach-s3c2410/mach-smdk2410.c 添加頭文件: #include 添加初始化參數(shù): 實質(zhì)是填充結(jié)構(gòu)體s3c2410fb_mach_info 調(diào)用設(shè)置函數(shù)使參數(shù)生效: 實質(zhì)將上面填充的結(jié)構(gòu)體s3c2410fb_mach_info與platform設(shè)備關(guān)聯(lián)起來25項目步驟觸摸屏驅(qū)動移植觸摸屏中斷響應過程26項目步驟觸摸屏驅(qū)動移植觸摸屏函數(shù)調(diào)用過程27項目步驟觸摸屏驅(qū)動移植觸摸屏移植過程第一:我們需要修改 linux2.6.25/drivers/input/touchs

16、creen 目錄下的 makefile 文件, 將觸摸屏驅(qū)動鏈接進去第二:修改 linux2.6.25/ drivers/input/touchscreen/Kconfig ,在上面添加觸摸屏驅(qū)動配置信息, 修改完成以后,在我們配置內(nèi)核的時候,就會增加關(guān)系s3c2410的觸摸屏配置第三:修改 linux-2.6.25/arch/arm/mach-s3c2410/mach-smdk2410.C文件 修改linux-2.6.25/ arch/arm/mach-s3c2410/devs.h 文件 修改arch/arm/mach-s3c2410/devs.c文件 修改上面3個文件的實質(zhì)就是將觸摸屏的一

17、些初始化參數(shù)賦給 platform_device 第四:配置內(nèi)核:第五:編譯內(nèi)核:make zImage第六:測試在/dev/input/下生成的event0文件就是觸摸屏設(shè)備驅(qū)動文件Cat event0,然后觸摸觸摸屏,日志上就有觸摸點的x和y坐標28項目步驟觸摸屏驅(qū)動移植29項目步驟根文件系統(tǒng)移植Linux內(nèi)核啟動掛載android根文件系統(tǒng)過程分析/arch/arm/boot/compressed/head.SStart: /vivi引導bootstraploader (0 x30008000)/arch/arm/boot/compressed/misc.cDecompressed_ke

18、rnel()/解壓內(nèi)核,將內(nèi)核放到RAM中Call_kernel() /跳轉(zhuǎn)到RAM里存放內(nèi)核的地方/init/main.c Start_kernel ():/啟動內(nèi)核Setup_arch() /Rest_init()Init()Do_basic_setup()Prepare_namespace()/啟動加載初始化結(jié)束init_post(void) /進入用戶模式LINUx內(nèi)核啟動部分30項目步驟根文件系統(tǒng)移植init_post(void) 分析31項目步驟根文件系統(tǒng)移植從GoogleCode上獲取Android源碼,進入platform下編譯Android源碼32項目步驟根文件系統(tǒng)移植33項

19、目步驟根文件系統(tǒng)移植Linux內(nèi)核啟動掛載android根文件系統(tǒng)過程分析/zhaoAndroid/out/target/product/generic/root34項目步驟根文件系統(tǒng)移植Init.c分析35項目步驟根文件系統(tǒng)移植init進程是Android啟動后系統(tǒng)執(zhí)行的第一個名稱為init的可執(zhí)行程序。這個程序以一個守護進程的方式運行,它提供了以下功能: 設(shè)備管理 解析啟動腳本 執(zhí)行啟動腳本中的基本功能 執(zhí)行啟動腳本中的各種功能 36項目步驟根文件系統(tǒng)移植37項目步驟根文件系統(tǒng)移植Init.rc分析38項目步驟根文件系統(tǒng)移植Init.rc是一個腳本文件,這個腳本被直接安裝到目標系統(tǒng)的根文件

20、系統(tǒng)中,被init可執(zhí)行程序解析,有一定的語法規(guī)則理解這些語法規(guī)則有利于我們很好理解到底init.rc執(zhí)行了哪些命令。四大類聲明組成:行為類(Actions),命令類(Commands),服務類(Services),選項類(Options).如果想要修改啟動過程只需要修改init.c或者init.rc里的內(nèi)容即可 39項目步驟根文件系統(tǒng)移植Init.rc修改40項目步驟應用程序開發(fā)功能和架構(gòu)功能:展示小組內(nèi)各個成員工作。程序開始運行時首先進入一個開始動畫,動畫是一個3D立方體不停的旋轉(zhuǎn),立方體的每面都有一張Android機器人的圖片紋理,動畫持續(xù)時間是10s。動畫結(jié)束后,進入小組成員展示界面,

21、該界面有小組5位成員的照片,照片依次橫向排列,屏幕內(nèi)一次最多能看到三位成員的照片,通過拖拽圖片可以移動,看到其他圖片。點擊每個小組成員的照片可以進入相應成員工作說明的界面,該界面對各個小組成員的工作進行了簡明扼要的說明,通過返回按鈕可以返回小組成員展示界面。41項目步驟應用程序開發(fā)架構(gòu):開頭動畫:OpenGL實現(xiàn),由四個程序文件:OpenGL.java、GLView.java、GLRenderer.java、GLCube.java。OpenGL只是將GLView中定義的視圖類GLView裝配上并用線程控制運行時間。而GLView定義的視圖類是裝配了GLRenderer中定義的Renderer類

22、,Renderer類是由GLSurfaceView中定義的一個專門用于渲染3D的借口。在GLRenderer構(gòu)建Renderer類時,我們必須實現(xiàn)3個抽象方法:public vod onDrawFrame(GL10 gl)、public void onSurfaceChanged(GL10 gl, int width, int height)、public void onSurfaceCreated(GL10 gl, EGLConfig config)。當窗口被創(chuàng)建時需要調(diào)用onSurfaceCreated,所以要在里面對OpenGL做一些初始化的工作,如立方體模型的初始化,光線的定義,紋理的載入等。當窗口的大小發(fā)生改變時調(diào)用onSurfaceChanged方法,在該方法中需要設(shè)置OpenGL場景的大小。最后所有的繪圖操作都在onDrawFrame()方法中進行。而立方體模型的定義是在GLCube中實現(xiàn)的。42項目步驟應用程序開發(fā)小組成員展示界面:界面的拖動效果是由Gallery控件實現(xiàn)的,但需要一個容器來存放Gallery顯示的圖片,這里需要一個繼承自BaseAdapter類的派生類來裝這些圖片,這個容器需要將所有要顯示的圖片的索引存放在一個int型數(shù)組中,然后通過set

溫馨提示

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

最新文檔

評論

0/150

提交評論