Android驅動開發第四章隨想

來源:互聯網
上載者:User

標籤:

本章主要講解搭建Android系統移植開發環境的整個流程,首先講解如何搭建嵌入式交叉開發環境,包括交叉編譯環境,各種服務程式和應用程式的安裝配置和使用:

1)GNU交叉工具鏈的下載
從ARM官方網站下載www.arm.linux.org.uk,可以從該網站下載2.95.3工具鏈:
ftp://ftp.arm.linux.org.uk/pub/armlinux/toolchain/cross-2.95.3.tar.bz2
2)cross-2.95.3.tar.bz2包的安裝步驟a.#mkdir/usr/local/arm;b.#cpcross-2.95.3.tar.bz2/usr/local/arm;c.#tarjxvfcross-2.95.3.tar.bz2;
d.添加環境變數:在檔案/etc/bashrc檔案最後添加:

exportPATH=/usr/local/arm/2.95.3/bin:$PATH;e.工具鏈安裝完成。

2.3 配置NFS服務的步驟
NFS服務就是將宿主機的一個目錄通過網路可以被掛載到其他電腦上,並且作為其他電腦的一個目錄,其目的就是讓不同的機器、不同的作業系統之間可以彼此共用檔案。NFS的使用分伺服器端和用戶端,其中伺服器端提供要共用的檔案,用戶端通過掛載“mount”這一動作實現對共用檔案的訪問操作。下面主要介紹GEC2410開發板的Linux系統與虛擬機器的Linux通過NFS實現檔案分享權限設定的方法與步驟:
1)在虛擬機器linux配置nfs服務,編輯nfs設定檔/etc/exports,設定共用目錄如:vi/etc/exports,添加:/root/nfs_share3(rw,sync,no_root_squash)。rw表示允許下位機讀寫該目錄,no_root_squash允許下位機以主機root使用者身份掛載根檔案系統。
2)在虛擬機器linux啟動NFS服務:(修改設定檔後就需要重新啟動nfs服務)#/etc/init.d/nfsrestart或者用命令:#servicenfsrestart。
3)防火牆的關閉。選擇系統設定->安全層級,將安全層級改為“無防火牆”。
4)用交叉網線串連PC機(虛擬機器)與開發板,目的讓兩個linux處在同一個網路內。
開發板的ip地址是:192.168.2.223,因此配置虛擬機器ip為192.168.2開頭的ip地址,如可用下列命令配置:#ifconfigeth0192.168.2.23。
5)在開發板linux系統中掛載虛擬機器linux的NFS共用目錄,執行下列命令:#mkdir/tmp/nfs#mount-tnfs-onolock192.168.2.23:/root/nfs_share/tmp/nfs。

製作交叉調試器的方法
1)解壓源碼包:tarzxfgdb-6.0.tar.gz2)配置:cdgdb-6.0mkdirbuild2arm2linuxcdbuild2arm2linux
../configure--target=arm2linux--prefix=/usr/local/arm/2.95.3/3)編譯:make
4)安裝:makeinstall
  在/usr/local/arm/2.95.3/bin/目錄下產生arm2linux2gdb工具
5)編譯產生針對arm處理器的gdbservera.進入gdb原始碼包中的gdbserver目錄cdgdb-6.0cdgdb/gdbserverb.配置產生gdbserverchmodu+xconfigure
CC=arm-linux-gcc./configure--host=arm2linux

接下來是U-Boot的編譯與移植,然後講解了Android系統下Linux核心的相關知識,最後講了核心編譯與移植的方法

(1)安裝交叉編譯器 
     (a)在/usr/local/目錄下建立檔案夾arm 
     (b)將arm-linux-gcc-3.4. l.tar.bz2拷貝到arm檔案夾下      (c)# tar jxvf arm-linux-gcc-3.4. l.tar.bz2     
//解壓縮編譯器,其中:jxvf中的j表示用bzip2來壓縮/解壓縮檔案             (d)vi ~/.bash_profile //設定系統內容變數 
        //把arm-linux-gcc的路徑/usr/local/arm/3.4.1/bin添加到PATH中: 
【原來】 :PATH=$PATH:$HOME/bin 
        【修改為】:PATH=$PATH:/usr/local/arm/3.4.1/bin         (2)解壓縮核心代碼並配置核心 
     (a)# tar jxvf linux2.6.14.tar.gz    //解壓縮核心,其中:zxvf中的z表示用gzip來壓縮/解壓縮檔案       (b)# ls 
     (c)# cd linux2.6.14  三、修改makefile檔案 
    核心的編譯是根據makefile檔案的指T進行的,Makefile檔案來組織核心的各模組之間的 
關係,記錄了各個模組之間的相互聯絡和依賴關係。 
    我們首先修改linux-2.6.14的根目錄下的makfile檔案,我們須改的卞要內容是目標代碼的 
類型和為編譯核心指定一個編譯器。     我們注釋掉以下內容:     #ARCH?=$(SUBARCH)       #CROSS COMPILE?=     增加如下內容:     ARCH:= arm 
    CROSS COMPILE =/usr/local/arm/3.4.1/bin/arm-linux-

4.1 設定flash分區     4.1.1 指明分區資訊 
在arch/arm/mach-s3c2410/devs.c檔案中: 
[[email protected] linux-2.6.14]$ vi arch/arm/mach-s3c2410/devs.c      (1)增加標頭檔定義: 
        /***********add here***********/         #include <linux/mtd/partitions.h>         #include <linux/mtd/nand.h>         #include <asm/arch/nand.h> 
        /**************end add********/ 
     (2)增加nand flash分區資訊定義(分區資訊和bootloader一致就可以) /***********add here***********/ 
static struct mtd_partition partition_ info[]={ [0]={    //128K  
name: "boot",   //name:代表分區名字 
size: 0x20000,   //size:代表flash分區大小(單位:位元組) 
offset: 0,   //offset:代表flash分區的起始地址(相對幹0x0的位移) }, 
[1]={    //3M name: "kernel", size: 0x300000, offset: 0x20000, }, 
[2]={    //5M name: "rootfs", size: 0x500000, offset: 0x320000, }, 
[3]={    //1M name: "etc", 
size: Ox 100000, offset: 0x820000. }, 
[4]=    //11M name: user 
size: Oxb00000, offset: Ox920000, } 
[5]={ 
name: "qt", 
size: Ox2b00000, offset: Ox 1420000, } };

/**************end add********/      (3)加入Nand Flash分區 
/***********add here***********/ struct s3c2410_ nand_ set nandset={ 
         nr_partitions: 6,/*the number of partitions*/         partitions: partition_ info,/*partition table*/ }; 
/**************end add********/ 
nr_partitions:指明partition_ info中定義的分區數目 partitions:分區資訊表 
     (4).建立Nand Flash晶片支援 /***********add here***********/ 
struct s3c2410_platform_nand superlpplatform={ 
        tacls:0, //tads, twrph0, twrphl的意思見S3C2410手冊的6-3         twrph0:30,        twrph 1:0, 
        sets: &nandset, //支援的分區資訊集          nr_sets: 1, //分區集的個數    }; 
/**************end add********/ 
    (5).加入Nand Flash晶片支援至Nand Flash驅動 
另外,還要修改此檔案中的s3c_device_nand結構體變數,添加對dev成員的賦值  
struct platform_device s3c_device_nand={    .name="s3c2410-nand", /*Device name*/    .id=-1,               /*Device ID*/ 
   .num resources=ARRAY_ SIZE(s3c_nand_resource), //有幾個寄存器區    .resource=s3c_nand_resource, /*Nand Flash Controller Registers*/寄存器區首地址 
/***********add here***********//*Add the Nand Flash device*/    .dev={ 
   .platform_data=&superlpplatform    } 
/**************end add********/    }; 
    4.1.2 指定啟動時初始化 
kernel啟動時依據我們對分區的設定進行初始配置 修改arch/arm/mach-s3c2410/mach-smdk2410.c檔案 [[email protected] linux-2.6.14]$ vi 
arch/arm/mach-s3c2410/mach-smd1Q410.c 
修改smdk2410_devices[].指明初始化時包括我們在前面所設定的flash分區資訊 
static struct platform- device *smd1Q410_ devices[]_   initdata={            &s3c_ device_ usb,

Android驅動開發第四章隨想

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.