OMAP3530 - Android实验指导书 - 图文

更新时间:2024-07-03 15:17:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

OMAP3530 Android实验指导书

目录

第一章 Bootload编译2

1.开发环境搭建 2 2.x-load编译 13 3.u-boot编译 14

第二章ANDROID内核配置及编译 15 2.2KeyBoard驱动配置 16 2.3Audio驱动配置 19 2.4MMC/SD驱动配置 20 2.5NandFlash驱动配置 21 2.6LCD驱动配置 22 2.7.内核编译 22

第三章ANDROID驱动编写 23 3.1Android键盘驱动编写 23 3.2编译 33

第四章ANDROID开发环境建立 34 3.1基本环境的建立 34 3.2Java环境建立 35

3.3Android源码包的建立 36

第五章ANDROID 的编译模拟文件系统制作 37 4.1Android 源码包的编译 37

4.2在模拟器中运行编译出的的Android镜像 39 4.3Android根文件系统的制作 42 第六章ANDROID 系统烧写 43 6.1Bootload烧写 43 6.2kernel 烧写 54 6.3文件系统烧写 54

6.4Android 根文件系统安装 55 第七章ECLIPSE的安装和使用 58 7.1Eclipse的安装 58 7.2Eclipse的设置 60

7.3使用Eclipse开发Android应用程序 63

OMAP3530 Android实验指导书

第一章 Bootload编译

本章介绍如何搭建基于Android的TechV-3530平台Bootload交叉编译环境;下一章也是基这个环境。

注意: 本文中使用的Linux的版本为Ubuntu 10.04,下文中简称为Ubuntu。

1.开发环境搭建

用户在编译前,必须先搭建好ARM Linux交叉开发环境。下面以Ubuntu操作系统为例(Ubuntu请用户自己安装好,可以参考网络上的资源)介绍交叉开发环境的搭建,其它Linux系统的操作与Ubuntu系统类似。

打开虚拟机前,打开任务管理器确认VMware开头的服务都已开启。

OMAP3530 Android实验指导书

1.1.交叉编译环境的安装

在安卓文件下找到arm-2007q3-51-arm-none-linux-gnueabi-i686.tar.bz这个文件(实验中用到的文件均在安卓文件里)。文件不可以直接复制到/opt下,可以利用复制先粘贴到home/administrator下(administrator是你电脑的帐号名称,不同的电脑对应home下文件夹的名称不同),然后在ubuntu下打开终端(终端位置在左上角的

Applications/Accessories/Terminal或应用程序/附件/终端,打开的终端路径默认在管理员的路径中,如“home/administrator”)输入

ls

查看下在当前路径下存在的文件

OMAP3530 Android实验指导书

再输入

sudo cp arm-2007q3-51-arm-none-linux-gnueabi-i686.tar.bz /opt -----此命令是复制文件到opt下.提示:按完arm按Tab键可自动补全文件名

cd /opt -----切换到Opt文件夹下

sudo tar xvjf arm-2007q3-51-arm-none-linux-gnueabi-i686.tar.bz -----解压文件到当前文件夹

注意:如果是第一次使用sudo,需要输登陆密码,但是密码不会显示 .

1.2.添加环境变量

以上工具安装完成后,还需要使用如下命令把它们添加到环境变量中:

export PATH=/opt/arm-2007q3/bin:/home/u-boot/tools:$PATH

注意: 用户可把它写入用户目录的.barsrc文件中,终端下输入sudo gedit /etc/bash.bashrc,将上面的指令粘贴到文件的最后一行,保存退出,输入source /etc/bash.bashrc使其生效。那么系统启动的时候自动完成环境变量的添加,查看路径可以使用echo $PATH命令。如果没有添加环境变量,请在编译之前执行一下如上命令。

1.3.NFS的设置

1.3.1安装Ubuntu nfs服务 在终端上输入: Sudo apt-get update

OMAP3530 Android实验指导书

sudo apt-get install nfs-kernel-server (此步骤需要联网,之后用到apt-get install指令时也必须联网)

输入Y回车继续

1.3.2修 改nsf配置文件 终端上输入:

sudo gedit /etc/exports

在文件中添加Ubuntu nfs的目录格式如下

/home/omap3evm_nfs *(rw,sync,no_subtree_check)

OMAP3530 Android实验指导书

存盘退出

注意:添加时不要在#后面添加,因为#起的是注释作用

1.3.3在根目录下建立nfs的 目录 sudo mkdir /home/omap3evm_nfs 修改该目录的权限

sudo chmod 777 -R /home/omap3evm_nfs

1.3.4重新启动Ubuntu nfs

sudo /etc/init.d/nfs-kernel-server restart

1.3.5测试nfs

sudo mount 192.168.86.129:/home/omap3evm_nfs /mnt (192.168.86.129为你本电脑的IP,可以在终端上用ifconfig命令查看地址,注意/mnt前的空格)

OMAP3530 Android实验指导书

df

运行df命令查看是否挂载成功。查看后可以使用以下命令卸载: sudo umount /mnt

1.4.tftp的设置

1.4.1安装与配置tftp服务 第1步:

安装tftp所需的软件。首先需要安装tftp-hpa,tftpd-hpa,前者是客户端,后者是服务程序.

在终端下输入sudo apt-get install tftp-hpa tftpd-hpa --------安装tftp-hpa和tftpd-hpa 然后还需要安装xinetd,在终端下输入 sudo apt-get install xinetd ---安装xinetd

第2步:

配置相关服务文件。进入根目录下的etc文件夹(cd /etc/),首先用ls看目录中有没有一个xinetd.conf文件,如果没有则新建一个,有的话用sudo gedit xinetd.conf查看内容,看是否与下面的一致,若不一致则修改,内容如 下: # Simple configuration file for xinetd #

# Some defaults, and include /etc/xinetd.d/ defaults {

# Please note that you need a log_type line to be able to use log_on_success ont-size: 12pt; \log_type = SYSLOG daemon info }

includedir /etc/xinetd.d 保存退出 第3步:

配置tftp服务器命令:

OMAP3530 Android实验指导书

sudo gedit /etc/default/tftpd-hpa 不用VIM

sudo vim /etc/default/tftpd-hpa(如果vim命令不存在,则用sudo spt-get install vim安装) 打开后按a键可插入内容 将内容修改成

# /etc/default/tftpd-hpa

TFTP_USERNAME=\

TFTP_DIRECTORY=\

#这是你tftp服务器的工作目录,可自行修改。 TFTP_ADDRESS=\ TFTP_OPTIONS=\

按ESC键退出插入模式,输入:wq可保存退出

第4步:

然 后进入xinetd.d文件夹(cd /etc/xinetd.d),用ls查看是否有一个tftp文件,如果没有就新建一个(sudo touch tftp),如果有的话就查看内容是否与下面的一致(sudo gedit tftp),不一致则修改,内容如下: service tftp {

socket_type = dgram wait = yes disable = no user = root protocol = udp

server = /usr/sbin/in.tftpd server_args = -s /tftpboot

#log_on_success += PID HOST DURATION #log_on_failure += HOST per_source = 11 cps =100 2 flags =IPv4 }

其 中server_args一行是配置服务器的文件存放的位置,就是进行tftp传输的时候,都是从该文件夹中搜索文件的,和第三步tftpboot的目录保持一致。 保存退出 第5步:

OMAP3530 Android实验指导书

修 改所需文件夹的权限。需要修改的文件夹也就是上一步提到的那个服务器文件存放的文件夹,以我的配置文件为例,创建一个文件夹(输入cd返回administrator目录下sudo mkdir /tftpboot),然后把它可以设置成访问权限最宽松的(sudo chmod 777 /tftpboot),也可以设置成合适的权限。

第 6步:

重新启动服务。

sudo service tftpd-hpa restart

当配置好tftp的配置文件后,需要重新启动一下xinetd,在终端中输入 sudo

/etc/init.d/xinetd reload,重新加载一下进程,再输入 sudo /etc/init.d/xinetd restart,重启服务。记住,每次修改完配置文件后,都需要重新启动一下服务。终端上执行次序: sudo service tftpd-hpa restart sudo /etc/init.d/xinetd reload sudo /etc/init.d/xinetd restart

1.4.2: 在tftpboot文件夹下新建测试文件 aaa

cd /tftpboot sudo touch aaa

sudo chmod 777 aaa

1.4.3: 开始测试tftp服务 cd /home

sudo tftp 192.168.86.129 (192.168.86.129为你本电脑的IP) get aaa

如果没有出现错误代码且在home目录下出现aaa文件则证明tftp 服务建立成功

输入q退出

注意:

1:如果出现permission denied 错误 则是操作者权限不够,需要提升权限 su root

输入密码后就可以正常进行tftp传输操作了(不知道密码可以用sudo passwd root设置密码)

2:如果出现Access violation错误 则是文件权限没有解开,将要操作的文件操作权限全解开就可以了

chmod 777 文件名

OMAP3530 Android实验指导书

1.5minicom 安装配置

安装:

sudo apt-get install minicom 配置:

1. 在终端中输入sudo minicom以启动minicom;

2.先按下Ctrl+ a, 放开,再按o,出现配置菜单.

OMAP3530 Android实验指导书

3.选择 Serialport setup, 此时所示图标在“Changewhich setting”中,键入“A”,此时光标移到第A项对应处:串口COM1对应ttyS0,COM2对应ttyS1.(注意选择) 具体的配置信息如下所示:

OMAP3530 Android实验指导书

注意: 如果没有使用USB转串口,而是直接使用串口,那么Serial Device要配置为/dev/ttyS0(如果使用USB转串口,则需要查看dev下是否存在ttyUSB0,若没有,则创建一个:mknod /dev/ttyUSB0 c 188 0)

对波特率,数据位和停止位进行配置,键入“E”,波特率选为1152008N1 (奇偶校验无,停止位1),

硬/软件流控制分别键入“F”“G”并且都选NO.

在确认配置正确之后,可键入回车返回上级配置界面,并将其保存为默认配置。(即save

setup as dfl),

之后退出,然后按下ctrl+a,在按x重启minicom,,

OMAP3530 Android实验指导书

终端输入sudo minicom,看下port口是否生效。在连上开发板的串口线后,就可在minicom中打印正确的串口信息了。

2.x-load编译

说明:

找到x-load.tar.bz2文件。先复制粘贴到home/administrator下,然后在ubuntu下打开终端(终端位置在左上角的Applications/Accessories/Terminal)输入 :

ls

sudo cp x-load.tar.bz2 /home 终端下进入home目录: sudo /home

sudo tar xvzf x-load.tar.bz2

在/home目录下建一个文件夹命名为linux_host. 创建方法:在终端上输入

sudo mkdir /home/linux_host

然后找到windows下的signGP复制进文件夹home/administrator下. cd (回到根目录下)

sudo cp signGP /home/linux_host(复制到linux_host目录下) 编译步骤:

在打开终端,进入/home/x-load目录cd /home/x-load,

export PATH=/opt/arm-2007q3/bin:/home/u-boot/tools:$PATH

OMAP3530 Android实验指导书

更改一下文件夹属性:

sudo chmod 777 -R /home/x-load make omap3evm_config make

等待编译结束,生成x-load.bin;

注意:

x-load.bin不能够直接烧写到FLASH中,在烧写之前需要进行转化。 转化步骤:

把编译得到的x-load.bin拷贝到Linux的/home/linux_host/目录下sudo cp /home/x-load/x-load.bin /home/linux_host,打开Linux下的终端,输入下面的指令:

cd /home/linux_host

sudo ./signGP ./x-load.bin(注意执行命令是点杠“./”)

执行完后在/home/linux_host/目录下会生成x-load.bin.ift;说明:x-load.bin.ift为烧写FLASH时需要的x-load文件;

3.u-boot编译

说明:

找到u-boot.tar.bz2文件先复制粘贴到home/adminitrator目录下,打开终端

administrator@ubuntu:~$ ls (注意:终端下的administrator显示的是你的用户名) administrator@ubuntu:~$ sudo cp u-boot.tar.bz2 /home/ 复制到linux下的/home目录下,在终端下进入/home目录 sudo /home

输入:sudo tar xvzf u-boot.tar.bz2

编译步骤:

在虚拟机里面打开终端,进入/home/u-boot目录cd /home/u-boot;在终端依次输入下面的命令:

export PATH=/opt/arm-2007q3/bin:/home/u-boot/tools:$PATH

make omap3evm_config make

等待编译结束,编译结束后会在u-boot目录下生成一个u-boot.bin文件。

OMAP3530 Android实验指导书

第二章Android内核配置及编译

Android内核编译,首先要进行配置,然后才能进行编译,如果设置不正确的话,编译出来的内核可能不能用。

首先进入配置界面必需安装libncurses5-dev软件包。在终端上输入: sudo apt-get install libncurses5-dev

其次找到linux-2.6.28-omap.tar.bz2文件,复制粘贴到home/adminitrator目录下. 终端下输入sudo cp linux-2.6.28-omap.tar.bz2 /home 在终端下进入/home目录cd /home, 输入:

sudo tar xvzf linux-2.6.28-omap_android.tar.bz2 进入到内核目录中:

cd /home/linux-2.6.28-omap/ 输入下面的命令:

export PATH=/opt/arm-2007q3/bin:/home/u-boot/tools:$PATH sudo apt-get install uboot-mkimage #后的三种内核编译三选一:

#使用ARM-DSP-IV默认的配置编译

sudo make omap3_arm_dsp_iv_android_defconfig

#使用ARM-860实验箱默认的配置编译 (EL-ARM-860实验箱输入此指令,可以跳过手动选择编译选项)

sudo make omap3_arm_860_defconfig #如果需要选择编译选项,使用下面的命令

sudo make menuconfig //出现如下图所示界面

2.1 Touchscreen驱动配置(如果想对选项进行操作的话,先到对应项上点击空格键即可修改选项)

OMAP3530 Android实验指导书

Device Drivers ---> Input device support ---> [*] Touchscreens ---> <*> ADS7846/TSC2046 and ADS7843 based touchscreens

2.2KeyBoard驱动配置

OMAP3530 Android实验指导书

Device Drivers ---> Input device support ---> [*] Keyboards ---> <*> Android keypad Support <*> Ds7279 keypad support < > Ds7279_860 keypad support

如上选择是支持EL-ARM-DSP-IV的键盘驱动;如果是EL-ARM-860实验箱,请把Ds7279 keypad support这一项不选;然后选上<* > Ds7279_860 keypad support这一项。 键盘定义:

OMAP3530 Android实验指导书

Menu Left Volume Down Not Defined up Enter Down Back Home Right Volume Up Not Defined Not Defined Not Defined Not Not Defined Defined EL-ARM-DSP-IV的键盘及功能

Not Not Not Not Defined Defined Defined Defined Not Defined Not Defined Back Menu Left Volume Down Up Enter Down Home Right Volume Up EL-ARM-860实验箱的键盘及功能定义

OMAP3530 Android实验指导书

2.3Audio驱动配置

Device Drivers ---> <*> Sound card support ---> <*> Advanced Linux Sound Architecture ---> [*] Support old ALSA API [*] Verbose procfs contents <*> ALSA for SoC audio support ---> <*> SoC Audio for the Texas Instruments OMAP chips <*> SoC Audio support for OMAP3EVM

OMAP3530 Android实验指导书

2.4MMC/SD驱动配置

Device Drivers ---> <*> MMC/SD/SDIO card support ---> [*] Allow unsafe resume (DANGEROUS) <*> MMC block device driver [*] Use bounce buffer for simple hosts <*> TI OMAP High Speed Multimedia Card Interface support [*] OMAP SDIO Support [*] Marvell SDIO WLAN support

OMAP3530 Android实验指导书

2.5NandFlash驱动配置

Device Drivers ---> <*> Memory Technology Device (MTD) support ---> <*> NAND Device Support ---> [*] Verify NAND page writes <*> NAND Flash device on OMAP2 and OMAP3

OMAP3530 Android实验指导书

2.6LCD驱动配置

Device Drivers ---> Graphics support ---> <*> Support for frame buffer devices ---> <*> OMAP frame buffer support (EXPERIMENTAL) (2) Consistent DMA memory size (MB) [*] Backlight & LCD device support ---> <*> Backlight support for OMAP3EVM VGA LCD Panel Console display driver support ---> <*> Framebuffer Console support [*] Bootup logo --->

2.7.内核编译

编译步骤:

打开终端,进入/home/ linux-2.6.28-omap目录; 在终端输入下面的命令:

OMAP3530 Android实验指导书

sudo make uImage

等待编译结束,编译结束后会在arch/arm/boot目录下生成uImage 。 注意:

假如编译过程中出现

/bin/sh: arm-none-linux-gnueabi-gcc: not found

make[1]: *** [kernel/bounds.s] Error 127

make: *** [prepare0] Error 2

我们需要找到内核目录下的makefile文件中,找到对应行把gcc的相对的路径改成绝对路径。在终端上输入:

sudo gedit /home/linux-2.6.28-omap/Makefile 在弹出的文件中找到:

export KBUILD_BUILDHOST := $(SUBARCH)

ARCH ?= $(SUBARCH)

CROSS_COMPILE ?= arm-none-linux-gnueabi-

改成:

export KBUILD_BUILDHOST := $(SUBARCH)

ARCH ?= $(SUBARCH)

CROSS_COMPILE ?=/opt/arm-2007q3/bin/arm-none-linux-gnueabi-

第三章Android驱动编写

Android驱动程序均已编写好,本章以Android下的键盘驱动为例,通过这章的学习可以了解到Android驱动的编写过程。

3.1Android键盘驱动编写

3.1.1键盘驱动注册

module_init(Kbd7279_Init);

OMAP3530 Android实验指导书

module_exit(Kbd7279_Exit);

3.1.2键盘初始化

void Setup_Kbd7279(void) { int i,result; omap_cfg_reg(OMAP3_KBD_GPIO); if (gpio_request(OMAP3_KBD_GPIO, \ printk(KERN_ERR \ gpio_direction_input(OMAP3_KBD_GPIO); set_irq_type(OMAP_GPIO_IRQ(OMAP3_KBD_GPIO), IRQ_TYPE_EDGE_FALLING);//IRQ_TYPE_EDGE_RISING enable_irq(gpio_to_irq(OMAP3_KBD_GPIO)); if(result = request_irq(OMAP_GPIO_IRQ(OMAP3_KBD_GPIO), &Kbd7279_ISR,0, \ { printk(KERN_INFO\ return -EBUSY; } else printk(\

send_byte(cmd_reset);

setcs1;

OMAP3530 Android实验指导书

printk(\ --- > [OK]\\n\

udelay(10); omap_7279key = input_allocate_device(); if (!omap_7279key) { kfree(omap_7279key); return -ENOMEM; }

/* setup input device */ omap_7279key->name= \ set_bit(EV_KEY, omap_7279key->evbit);//EV_KEY for(i=0;i<10;i++) set_bit(omap3evm_keymap[i]& KEYNUM_MASK,omap_7279key->keybit); input_register_device(omap_7279key); printk(\ --- > [OK]\\n\

write7279(decode1+7,0x1); write7279(decode1+6,0x2); }

OMAP3530 Android实验指导书

3.1.3键盘中断处理

static irqreturn_t Kbd7279_ISR(int irq,void* dev_id) { int i;

static char function = 1; disable_irq(gpio_to_irq(OMAP3_KBD_GPIO));

for(i=0;i<100;i++); KeyValue = read7279();

switch(KeyValue)

{

case 0x03: KeyValue=0x0d; break; case 0x02: KeyValue=0x0c; break; case 0x01: KeyValue=0x0b; break; case 0x00:

OMAP3530 Android实验指导书

KeyValue=0x0a;

input_report_key(omap_7279key,omap3evm_keymap[10]& (KEYNUM_MASK | KEY_PERSISTENT),1);//KEY(3, 3, KEY_KBDILLUMDOWN) udelay(10);

input_report_key(omap_7279key,omap3evm_keymap[10]& (KEYNUM_MASK | KEY_PERSISTENT),0);//KEY(3, 1, KEY_UP) input_sync(omap_7279key); break;

case 0x08:

KeyValue=0x03;

input_report_key(omap_7279key,omap3evm_keymap[5]& (KEYNUM_MASK | KEY_PERSISTENT),1);//KEY(3, 3, KEY_KBDILLUMDOWN) udelay(10);

input_report_key(omap_7279key,omap3evm_keymap[5]& (KEYNUM_MASK | KEY_PERSISTENT),0);//KEY(3, 1, KEY_UP) input_sync(omap_7279key); break;

case 0x09:

KeyValue=0x06;

input_report_key(omap_7279key,omap3evm_keymap[1]& (KEYNUM_MASK | KEY_PERSISTENT),1);//KEY(3, 3, KEY_KBDILLUMDOWN) udelay(10);

OMAP3530 Android实验指导书

input_report_key(omap_7279key,omap3evm_keymap[1]& (KEYNUM_MASK | KEY_PERSISTENT),0);//KEY(3, 1, KEY_UP) input_sync(omap_7279key); break;

case 0x0a:

KeyValue=0x09;

input_report_key(omap_7279key,omap3evm_keymap[8]& (KEYNUM_MASK | KEY_PERSISTENT),1);//KEY(3, 3, KEY_KBDILLUMDOWN) udelay(10);

input_report_key(omap_7279key,omap3evm_keymap[8]& (KEYNUM_MASK | KEY_PERSISTENT),0);//KEY(3, 1, KEY_UP) input_sync(omap_7279key); break;

case 0x0b:

KeyValue=0x0e;

input_report_key(omap_7279key,\ (KEYNUM_MASK | KEY_PERSISTENT));//KEY(3, 3, KEY_KBDILLUMDOWN) udelay(10);

input_report_key(omap_7279key,\input_sync(omap_7279key); break;

OMAP3530 Android实验指导书

case 0x10:

KeyValue=0x02;

input_report_key(omap_7279key,omap3evm_keymap[3]& (KEYNUM_MASK | KEY_PERSISTENT),1);//KEY(3, 3, KEY_KBDILLUMDOWN) udelay(10);

input_report_key(omap_7279key,omap3evm_keymap[3]& (KEYNUM_MASK | KEY_PERSISTENT),0);//KEY(3, 1, KEY_UP) input_sync(omap_7279key); break;

case 0x11:

KeyValue=0x05;

input_report_key(omap_7279key,omap3evm_keymap[7]& (KEYNUM_MASK | KEY_PERSISTENT),1);//KEY(3, 3, KEY_KBDILLUMDOWN) udelay(10);

input_report_key(omap_7279key,omap3evm_keymap[7]& (KEYNUM_MASK | KEY_PERSISTENT),0);//KEY(3, 1, KEY_UP) input_sync(omap_7279key); break;

case 0x12:

KeyValue=0x08;

input_report_key(omap_7279key,omap3evm_keymap[4]& (KEYNUM_MASK | KEY_PERSISTENT),1);//KEY(3, 3, KEY_KBDILLUMDOWN)

OMAP3530 Android实验指导书

udelay(10);

input_report_key(omap_7279key,omap3evm_keymap[4]& (KEYNUM_MASK | KEY_PERSISTENT),0);//KEY(3, 1, KEY_UP) input_sync(omap_7279key); break;

case 0x13:

KeyValue=0x00;

input_report_key(omap_7279key,omap3evm_keymap[6]& (KEYNUM_MASK | KEY_PERSISTENT),1);//KEY(3, 3, KEY_KBDILLUMDOWN) udelay(10);

input_report_key(omap_7279key,omap3evm_keymap[6]& (KEYNUM_MASK | KEY_PERSISTENT),0);//KEY(3, 1, KEY_UP) input_sync(omap_7279key); break;

case 0x18:

KeyValue=0x01;

input_report_key(omap_7279key,omap3evm_keymap[0]& (KEYNUM_MASK | KEY_PERSISTENT),16);//KEY(3, 3, KEY_KBDILLUMDOWN) udelay(10);

input_report_key(omap_7279key,omap3evm_keymap[0]& (KEYNUM_MASK | KEY_PERSISTENT),0);//KEY(3, 1, KEY_UP) input_sync(omap_7279key);

OMAP3530 Android实验指导书

break;

case 0x19:

KeyValue=0x04;

input_report_key(omap_7279key,omap3evm_keymap[2]& (KEYNUM_MASK | KEY_PERSISTENT),1);//KEY(3, 3, KEY_KBDILLUMDOWN) udelay(10);

input_report_key(omap_7279key,omap3evm_keymap[2]& (KEYNUM_MASK | KEY_PERSISTENT),0);//KEY(3, 1, KEY_UP) input_sync(omap_7279key); break;

case 0x1a:

KeyValue=0x07;

input_report_key(omap_7279key,omap3evm_keymap[9]& (KEYNUM_MASK | KEY_PERSISTENT),1);//KEY(3, 3, KEY_KBDILLUMDOWN) udelay(10);

input_report_key(omap_7279key,omap3evm_keymap[9]& (KEYNUM_MASK | KEY_PERSISTENT),0);//KEY(3, 1, KEY_UP) input_sync(omap_7279key); break;

case 0x1b:

KeyValue=0x0f;

OMAP3530 Android实验指导书

if(!function) function = 1; else function = 0; break; default: break; } //input_report_key(omap_7279key,0x338000e5,1); /*input_report_key(omap_7279key,KEY(1, 0, KEY_HOME)& (KEYNUM_MASK | KEY_PERSISTENT),1);//KEY(3, 3, KEY_KBDILLUMDOWN) udelay(10); input_report_key(omap_7279key,KEY(1, 0, KEY_HOME)& (KEYNUM_MASK KEY_PERSISTENT),0);//KEY(3, 1, KEY_UP) input_sync(omap_7279key); *///printk(\

write7279(decode1+0,KeyValue); write7279(decode1+1,KeyValue/16);

if(!function) write7279(disable,0x7f);

else write7279(disable,0xff); kbd_buf = (unsigned char)KeyValue; enable_irq(gpio_to_irq(OMAP3_KBD_GPIO));

| OMAP3530 Android实验指导书

return IRQ_HANDLED; } EL-ARM-DSP-IV的键盘驱动文件Ds7279.c在内核kernel的/drivers/input/keyboard/下。EL-ARM-860的键盘驱动文件Ds7279_860.c在内核kernel的/drivers/input/keyboard/下。

3.2编译

编写好驱动后,文件复制到内核源码包中,这里就是把Ds727.c复制到/drivers/input/keyboard/目录下。然后修改/drivers/input/keyboard/的Makefile,在最后一行添加如下: obj-$(CONFIG_KEYBOARD_MAPLE) += maple_keyb.o obj-$(CONFIG_KEYBOARD_BFIN) += bf54x-keys.o obj-$(CONFIG_KEYBOARD_SH_KEYSC) += sh_keysc.o obj-$(CONFIG_KEYBOARD_Ds7279) += Ds7279.o

修改/drivers/input/keyboard/下的Kconfig,添加如下:

config KEYBOARD_Ds7279 tristate \ help To compile this driver as a module, choose M here: the module will be called Ds7279.

endif 在make menuconfig 配置选项时如下选择,在编译内核时就会编译进内核,启动内核时就会自动加载键盘的驱动。

OMAP3530 Android实验指导书

Device Drivers ---> Input device support ---> [*] Keyboards ---> <*> Android keypad Support <*> Ds7279 keypad support < > Ds7279_860 keypad support

第四章Android开发环境建立

3.1基本环境的建立

在ubuntu下,需要使用到相当的软件包,可以使用下面的命令进行安装: sudo apt-get install git-core gnupg flex bison gperf libsdl-dev libesd0-dev

libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev(最好一个一个安装) 如果在编译过程中还缺少其他的命令和软件,可以根据提示用:

suod apt-get install xxx (xxx代表缺少的软件包名)来安装。

注意:Android 环境需要Internet网络支持,请保证网络畅通。

OMAP3530 Android实验指导书

3.2Java环境建立

3.2.1JDK5安装

JDK-1.5安装包,可以直接去sun官方主页下载,也可以使用我们在光盘中提供的jdk-1_5_0_18-linux-i586.bin, 然后,把它放置到文件夹(/usr /lib/jvm/java), 命令如下: 建立文件夹:

administrator@ubuntu:~$ sudo mkdir -p /usr/lib/jvm/java

administrator@ubuntu:~$ sudo cp /home/administrator/jdk-1_5_0_18-linux-i586.bin /usr/lib/jvm/java/ 进入到新建的目录:

administrator@ubuntu:~$ cd /usr/lib/jvm/java 查看JDK安装目录和安装包的权限:

administrator@ubuntu:/usr/lib/jvm/java$ ls -la total 81904

drwxr-xr-x 3 root root 4096 2011-02-10 00:00 . drwxr-xr-x 3 root root 4096 2011-02-09 23:55 ..

-rwxrwxrwx 1 root root 83854743 2011-02-09 23:58 jdk-1_5_0_18-linux-i586.bin 如果不是以上的权限,需要修改bin文件权限,使其可执行:

administrator@ubuntu:/usr/lib/jvm/java$ sudo chmod 777 jdk-1_5_0_18-linux-i586.bin

下面开始安装jdk:

administrator@ubuntu:/usr/lib/jvm/java$ sudo ./ jdk-1_5_0_18-linux-i586.bin 执行后,输入q,然后提示输入yes/no选择yes,执行完之后边可以目录下面看到文件夹jdk1.5.0_18

安装完毕,下面配置环境变量: 以root身份打开并编辑profile文件 sudo gedit /etc/bash.bashrc 在bash.bashrc 文件最后添加

export JAVA_HOME=/usr/lib/jvm/java/jdk1.5.0_18 export ANDROID_JAVA_HOME=$JAVA_HOME

OMAP3530 Android实验指导书

export PATH=$JAVA_HOME/bin:$PATH 保存并关闭 在终端下执行命令

source /etc/bash.bashrc

由于ubuntu中有默认jdk还需要执行如下代码,将安装的JDK加入java选项: administrator@ubuntu:/usr/lib/jvm/java$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java/jdk1.5.0_18 /bin/java 300

administrator@ubuntu:/usr/lib/jvm/java$ sudo update-alternatives --install /usr/bin/javac javac

/usr/lib/jvm/java/jdk1.5.0_18 /bin/javac 300 然后执行通设置系统默认的JDK代码:

sudo update-alternatives --config java 然后输入:

administrator@ubuntu:~$ java -version java version \

Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_18-b02) Java HotSpot(TM) Client VM (build 1.5.0_18-b02, mixed mode, sharing)

此时显示的系统中的java就是刚刚安装的 java

3.3Android源码包的建立

3.3.1Android 的下载

Windows下有打包好的Android源码包,可以跳过下载步骤。

打开终端输入以下命令: mkdir bin

curl http://android.git.kernel.org/repo > ~/bin/repo chmod a+x ~/bin/repo cd ~/

mkdir myandroid cd myandroid

repo init -u git://android.git.kernel.org/platform/manifest.git –b donut

OMAP3530 Android实验指导书

repo sync

在repo init 过程中会提示输入用户名和邮箱,随便输入一个就可以

3.3.2Android 的使用

我们已经提供了Android的源码包,文件名为Android_donut.tar.gz;将这个文件复制到Ubuntu主目录下运行解压指令:sudo tar xvzf Android_donut.tar.gz 这样就可以得到Android的源码目录了。

以我的文件为例,终端下输入

sudo cp Android_donut.tar.gz /home(拷贝完后立即删除Android_donut.tar.gz并清空回收站来释放空间)

cd /home

sudo tar xvzf Android_donut.tar.gz(解压完后用sudo rm Android_donut.tar.gz删除文件)

第五章Android 的编译模拟文件系统制作

4.1Android 源码包的编译

Android源码包在编译过程中需要GCC编译器,所以我们在终端上输入: sudo apt-get install g++

在编译过程中还会出现其他错误,我们需要对/usr/include/string.h +36进行修改: sudo gedit /usr/include/string.h +36 在弹出的文件中找到下面的几句:

/* Tell the caller that we provide correct C++ prototypes. */

OMAP3530 Android实验指导书

#if defined __cplusplus && __GNUC_PREREQ (4, 4)

# define __CORRECT_ISO_CPP_STRING_H_PROTO

#endif

把中间的一句注释掉变成:

/* Tell the caller that we provide correct C++ prototypes. */

#if defined __cplusplus && __GNUC_PREREQ (4, 4)

// # define __CORRECT_ISO_CPP_STRING_H_PROTO

#endif 保存退出。

在继续执行(jdk是安装在/usr/lib/jvm/java/jdk1.5.0_18/目录下的): cd /usr/bin

sudo ln -s -f /usr/lib/jvm/java/jdk1.5.0_18/bin/jar

sudo ln -s -f /usr/lib/jvm/java/jdk1.5.0_18/bin/javadoc

sudo ln -s -f /usr/lib/jvm/java/jdk1.5.0_18/bin/javah

Android的编译非常简单,在终端中进入到Android_donut的目录下运行make 即可以完成代码的编译,为了同时编译出配套的Android SDK,可以使用make sdk 进行编译。

编译时间会很长,编译结果放在了Android_donut/out下,其中out/host是主机上运行的一些程序,比如说编译出来的sdk就在Android_donut/out/host/linux-x86/sdk下,这些程序需要用来帮助调试,因此使用下面的命令设置环境变量:

sudo gedit /etc/bash.bashrc 在bash.bashrc中增加以下内容: export

ANDROID_SDK_ROOT=/Android_dount/out/host/linux-x86/sdk/android-sdk_eng.administrator_linux-x86

export PATH=$PATH$ANDROID_SDK_ROOT/tools:$PATH 保存后运行source /etc/bash.bashrc让设置生效,重新开一个终端就能使用android、emulator等命令了. 另外,android_donut/out/target/product/generic下放着所有用于板子上运行的程序,下面会介绍如何使用这些程序。

OMAP3530 Android实验指导书

4.2在模拟器中运行编译出的的Android镜像

下面介绍如何使用Android自带的模拟器来运行编译出来的Android镜像

4.2.1创建AVD

AVD是Android virtual device的缩写,就是一个运行Android系统的虚拟机器,如果已经按照上节配置了环境变量,那么在命令行中运行android命令就会弹出一个GUI界面的AVD创建程序(Android SDK and AVD Manager) 具体操作方法:

在终端上进入tools路径下,然后在执行android命令: administrator@ubuntu:/$cd

/Android_donut/out/host/linux-x86/sdk/android-sdk_eng.root_linux-x86/tools/

administrator@ubuntu:/Android_donut/out/host/linux-x86/sdk/android-sdk_eng.root_linux-x86/tools$ ls

adb dmtracedump hprof-conv zipalign android draw9patch lib source.properties apkbuilder emulator mksdcard sqlite3 ddms hierarchyviewer NOTICE.txt traceview

administrator@ubuntu:/Android_donut/out/host/linux-x86/sdk/android-sdk_eng.root_linux-x86/tools$./android

OMAP3530 Android实验指导书

按上图操作就创建了一个名为Android_donut的AVD,这里还可以指定一个虚拟的SD卡,使用mksdcard命令生成一个SD卡镜像,在终端上进入tools下执行: administrator@ubuntu:/Android_donut/out/host/linux-x86/sdk/android-sdk_eng.root_linux-x86/tools$ ./mksdcard 128M sdcard.img 这样就在当前目录下生成了一个SD卡的镜像文件,在Android SDK AVD Manager中可以找到这个文件作为AVD的虚拟SD card,用户还可以使用loop方式把这个sdcard.img挂载到主机目录下,这样就可以把主机下的一些文件通过sdcard传递到虚拟机中。

4.2.2运行emulator

本文来源:https://www.bwwdw.com/article/unk.html

Top