Android驱动开发第四章随想

本章主要讲解搭建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,

时间: 2025-01-14 00:28:26

Android驱动开发第四章随想的相关文章

Android深度探索HAL与驱动开发 第四章

Android深度探索HAL与驱动开发 第四章 源代码的下载和编译 读书笔记 一.下载编译和测试Android源代码 1.配置Android源代码下载环境 创建一个用于存放下载脚本文件的目录(可将该文件放到任何一个目录在这里使用-/bin) # mkdir ~/bin # PATH=~/bin:$PATH 2.下载repo脚本文件(用于下载Android源代码) # curl htttps://dl-ssl.google.com/dl/googlesource/git-repo/repo> ~/

Android深度探索(卷1)HAL与驱动开发 第四章 源代码的下载和编译 读书笔记

Android深度探索(卷1)HAL与驱动开发 第四章 源代码的下载和编译 读书笔记     本章学习了使用git下载两套源代码并搭建两个开发环境.分别为Android源代码和Linux内核源代码.Android源代码中包含了HAL(即硬件抽象层) 的代码,并学习了如何搭建这两种开发环境. Android 的移植的本质就是Linux内核的移植,Linux内核的移植主要是Linux驱动的移植.而开发和测试Linux驱动就需要安装以上两个开发环境. 搭建两套环境的具体步骤如下: 一.下载编译和测试A

Android深度探索HAL与驱动开发 第四章 源代码下载和编译

前面说过Android移植主要就是Linux内核的移植,而Linux内核移植主要是Linux驱动的移植,所以为了开发和测试Linux驱动,有必要学习在Ubuntu Linux下如何搭建两套开发环境:Android应用程序开发环境和Linux内核开发环境.Linux内核开发环境的搭建是重点中的重点.下面根据书上的内容和网上的资料写出了步骤: (1)配置Android源代码下载环境: (2)Android源代码目录分别存放了Android源代码的不同子项目 (3)下载Android源代码中的一部分两

安卓移植和驱动开发第四章心得体会

第四章我们学习了安卓移植环境的搭建,首先构建开发是任何开发工作的基础,对于软,硬件非常丰富的嵌入式系统来说,构建高效,稳定的环境是否开展工作的重要因素之一,在构建开发环境之前,我们必须了解相关的开发流程,主要流程包括,下载安卓内核,熟悉开发环境和工具,交叉开发环境.是安卓系统移植开发的基本模型,Linux内核环境配置,GUN工具链,测试工具甚至集成开发的环境都是安卓系统移植的利器:熟悉Linux内核,因为安卓系统移植和开发需要重新制定Linux内核,所以熟悉内核配置,编译和移植很重要:熟悉目标板

Android驱动开发第七章

控制发光二极管 本章我们在Linux驱动开发中实践过所以也很熟悉.也做出过不同的实验结果.所以编写LED驱动: 1.测试开发板,打开电源开关 2.创建LED驱动设备文件 3.卸载LED驱动的设备文件 4.设置寄存器与初始化LED驱动 5.控制LED 6.设置LED驱动的模块参数 本章给出了LED驱动的完整代码可以借鉴 测试LED驱动,本章介绍了一些复杂的测试方法,不仅可以向LED设备文件发送字符串,还可以发送I/O控制命令. 1.编写测试I/O控制命令的通用程序 2.使用NDK测试LED驱动 3

Android深度探索(卷1)HAL与驱动开发第四章总结

本章涉及到源代码,及上一章所学的git下载的两套源代码,一套是Android源代码,全部下载将近4GB大小,其含金量可想而知.另一套是Android核心部分的linux内核源代码,解压之后几百MB. 首先我们学习下载.编译.和测试Android源代码. 1.配置Android源代码下载环境 (1)创建一个用于存放下载脚本文件(repo)的目录 (2)下载repo脚本文件 (3)创建用于存放Android源代码的目录 (4)初始化 (5)开始下载Android源代码 2.Android源代码目录结

Android深度探索HAL与驱动开发-——第四章

第四篇主要是对android内核结构设备驱动.内核基本配置编译的内容介绍.首先对安卓结构进行简单的介绍,包括了设备驱动和源代码结构.在android常用驱动中包括Framebuffer.键盘以及控件屏幕驱动(电容和电阻).EAC音效.camera驱动.DM09000网络驱动.SD/TF存储卡.RTC.MTD.蓝牙驱动.WLAN驱动.在这些驱动设备中的EAC是一个非标准的MISC驱动用来实现音效的播放与录音:DM9000通过设置IP来实现上网功能:存储卡的功能十分重要系统更新等.RTC主要提供稳定

android深度探索 HAL及驱动开发 第四章

本章主要介绍如何下载和编译android源码和linux内核源代码.1.下载.编译和测试android源代码配置android源代码下载环境:第一步:创建一个用于存放下载脚本文件(repo)的目录(可将该脚本文件放到任何目录中在这里使用~/bin)# mkdir ~/bin# PATH=~/bin:$PATH第二步:下载repo脚本文件(用于下载android源代码)# curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo >

Android深度探索--HAL与驱动开发----第四章读书笔记

1. 下载.编译.测试源代码 创建存放下载文件的目录(repo) 下载repo脚本文件 创建用于存放源代码的目录 开始下载源代码. 2. 源代码目录含义摘要 Abi 应用程序二进制接口 Device 于设备相关的代码 External 宽展工具源代码 Ndk NDK相关的源代码 Sdk SDK如ddms.draw9patch.sdkmannager. System Android的基本系统 3. 下载源代码中的一部分 使用repo sync命令 使用git clone命令 4. linux内核目