s3c2410/2440(armv4t) 移植教程

來源:互聯網
上載者:User

Androidin首發
Androidin Dev.Team 熊貓哥哥

ARMv4移植簡單教程:

    相信國內很多朋友手上都有s3c2410/2440的片子,基於armv4t(arm920t)的指令架構。在之前,因為android的一些底層代碼含有armv5t的指令, 所以以前無法移植到這樣的平台。 在這裡也放出移植教程和已經編譯好的image。 讓更多的朋友可以在自己的開發板上親身體驗android。教程基於勤研qt2410以及揚創utu2440完成。
    注意,移植是到armv4而不是armv4t,  原因應該是不開thumb支援會比較好移植一些(改動未涉及的庫依然會用thumb代碼,所以kernel依然要開thumb支援)。
    kernel移植及nfs配置的詳細部分等請自行查閱相關文檔,本文只做提點,另外需要些git的操作。
    目前的image只是臨時方案。主要是基於openmoko的
benno一些尚未正式發布的patch,整體來說已經比較完善和clean,我僅做了點小修改就能使用,由於部分庫用c實現替換掉了arm實現,同時一
些critical的armv5指令被armv4的替換,速度可能有點慢,尤其是2410上速度很慢。。對於嚴苛的android開發組來說,這些
patch部分尚未提交,部分在reviewing,還需要一些周期才會被接受進官方git。等這些patch被官方接受後,我會整理另一套正式一些的版
本,同時可能會提供些最佳化方案。

A.  kernel的移植
    1. 移植,兩個方案可以選。
        1). 將android的官方kernel的補丁打到自己的kernel上,這個方法對於kernel版本比較新的朋友比較合適,也很簡單。比如2.6.24或以上。
            a. 下載android kernel,執行 git diff v2.6.25 HEAD > android.patch
            b. 進入你自己的kernl,執行 git apply android.patch
            c. 一般都會出error,手動合并所有帶error的檔案,如果你是2.6.25的話很簡單,2.6.24會費點周折,因為kobject/kset的一些改動造成android power/ipv4等驅動不太好合。。
        2). 將自己kernel上的bsp移植到android官方kernel。適用於kernel比較舊的朋友。
          
 因為2410/2440是linux原生支援,所以基本上只需要移植lcd/touchpanel/網卡等等的驅動,並開啟2410/2440支援選項
即可。這個目前網上已經有大量的資料詳細闡明, 在此不再累述,但是出問題比較多的地方就在這裡了。
    2. 這些步驟完成後,檢查如下選項是否都已經開啟(make menuconfig):
        CONFIG_AEABI=y   
        CONFIG_SHMEM=y   
        CONFIG_ASHMEM=y
        CONFIG_ARM_THUMB=y
        CONFIG_ANDROID_BINDER_IPC=y
        CONFIG_ANDROID_LOGGER=y
        以下不一定重要, 但能開就開,除非移植有問題,比如power驅動:
        CONFIG_ANDROID_POWER=y
        CONFIG_ANDROID_POWER_STAT=y
        CONFIG_ANDROID_POWER_ALARM=y
        CONFIG_ANDROID_RAM_CONSOLE=y
        CONFIG_ANDROID_TIMED_GPIO=y
        CONFIG_ANDROID_PARANOID_NETWORK=y
    3. 按需要make zImage,再產生uImage,燒寫到nand。

B. 製作android nfs root
    1. 下載我做好的android_armv4 image包,見文章下方
    2. 準備好能啟動的nfs root,設定好存取權限(重要!),資料請網上查閱,不再累述
    3. 拷貝包中的system目錄到nfs_root/system, data目錄到nfs_root/data, root目錄到nfs_root/ (其他.img檔案可以模擬器使用,同時也可以做真實檔案系統,後話了)
    4. 設定nfs啟動參數中的init=/init,既指向nfs_root下的init
    5. 刪除nfs_root/init.rc,去掉除mount tmpfs tmpfs /sqlite_stmt_journals size=4m之外所有的mount命令

C. 運行!
    跑跑看吧, 進入android console之後可以運行logcat查看log。第一次啟動會建立很多的資料,會比較慢,2410幾乎是折磨了。。平常的啟動速度2440大概在1分多鐘,2410要5分鐘了。看到漂亮的大手錶,你就搞定了!!

常見問題:
1. lcd不顯示, 檢查framebuffer..如果正常,查看nfs許可權。
2. 非法指令,檢查thumb,eabi選項。
3. servicemanager異常退出,檢查binder & ashmem選項。
其他的看kernel log和logcat自己分析吧~ 呵呵~

簡單流程就是如此,中間可能會遇到很多困難的!wish u luck!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.