OMAP3530 - Android实验指导书 - 图文
更新时间:2024-07-03 15:17:01 阅读量: 综合文库 文档下载
- omap3530推荐度:
- 相关推荐
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
正在阅读:
OMAP3530 - Android实验指导书 - 图文07-03
法制谜语纪委定稿03-09
中考文言文简答(三) - 图文04-04
环评爱好者论坛 - 建设项目环境影响报告表凤凰纺织(修改版) - 图文01-29
童年的乐园作文400字06-29
欢乐的海洋作文500字06-21
2022年开展夏季治安打击整治“百日行动”工作总结(5篇)03-27
小学安全备课教案09-28
民间个人借款借条模板大全02-11
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 指导书
- OMAP3530
- Android
- 实验
- 图文
- 2018艺考生英语复习方案
- 英语四级翻译突破之专项练习
- 浅论海洋环境中的钢筋混凝土腐蚀机理与防护方法
- 2016注会《税法》科目考试真题及答案解析
- PS实战第一讲牌匾
- 电大本科JAVA技术试题2008年7月
- 试谈如何搞好小学数学教学-最新教育文档
- 2018年中考英语模拟试题(一)附答案和解析
- 2013-2014学年山东省德州市校际联考高一下学期期末生物试卷
- 培养低年级学生自主识字能力的策略研究
- 关于社保内控自查报告
- 大坝柴油发电机带负荷启闭试验报告
- 英美崛起的共同因素
- 喜来登(Sheraton)酒店房务部行政管家岗位职责
- 新苏教版小学五年级数学下册教学计划
- 兴安盟人事考试信息网:国考申论热点之造城之风须治理
- 教师成就事业“五字诀”论文
- 批注式阅读在初中语文教学中的应用
- 中建一局关于(请求协调解决)XXX问题的请示
- 电力系统继电保护课程设计