代码改变世界

Android深度探索(二)

2016-06-05 21:48  1312马阳阳  阅读(313)  评论(0编辑  收藏  举报

第五章    搭建S3C6410开发板的测试环境

本章的学习,我对s3c6410开发板的测试环境有了一定的认识,并掌握了以下知识:
一、对于s3c6410这款开发板,它是一款低功耗、高性价比的处理器,它是基于ARM11的内核。
二、不同开发板的区别主要在烧录嵌入式系统的方式上。
三、安装串口调试工具的步骤:minicom的步骤
1、检测当前环境是否支持usb转串口
# lsmod | grep usbserial
2、安装minicom
# apt-get install minicom
3、配置minicom
# minicom -s 
进入“serial port setup”菜单项,按照所示的内容进行配置,设置完成后,选择配置中的“save setup as dfl”“Exit from minicom”两项。
注意:如果读者pc上有串口,可直接使用串口线,并将serial device 设置为/dev/ttys0,若没有串口,而是使用的USB接口,则应该设置为ttyusb0
4、测试minicom
# minicom
执行此命令后,若开发板安装了系统,minicom便能够接收到从开发板传来的数据信息,这样便成功安装并配置了minicom
四、烧写一个Android系统到开发板上
1、擦除NandFlash方法
1)用串口线或usb转串口线连接开发板和pc机,并启动minicom
2)进入Eboot状态
3)擦除NandFlash
2、烧写Android的步骤:
1)准备一个2GB4GBsd卡,要求FTA32分区格式,插入读卡器并连接pc
2)向sd卡写入minicomzImage-sd.bin文件
3)烧写前的准备工作
首先将Android_fs.tarmmc.binzImage文件复制到sd卡上,并设置成从sd卡启动,烧写完成后再用NandFlash启动Android
4)开始从sd卡烧写android
sd卡插入开发板的插槽,并设置成从sd卡启动,打开开发板,这时候开发板当出现#提示符时,输入.yjsx命令开始复制sd卡上的数据到开发板上,若最终出现“great!!! all jobs is over”信息时,说明成功安装Android系统到开发板上。
5)校准屏幕
安装完成后别忘记关闭开发板,然后将开关恢复到NandFlash启动状态。

 

第六章   第一个Linux驱动程序:统计单词个数

 

这一章的学习,我学会了一个完整的Linux驱动:统计单词数的word_count驱动,并学会了如同使用不同的方法来测试Linux驱动,也对Linux的驱动开发过程有了更深刻的了解。

一、编写Linux驱动程序的步骤

1.建立Linux驱动骨架

Module_init处理驱动初始化,module_exit处理驱动退出

2.注册和注销设备文件

 

Misc_register函数创建和misc_deregister移除设备文件

3.指定与驱动相关的信息

4.指定回调函数

5.编写业务逻辑

6.编写makefile文件

7.编译Linux驱动程序

8.安装和卸载Linux驱动

二.Linux驱动:统计单词个数

1.开始前的准备工作

1)建立存放Linux驱动程序的目录

mkdir –p /root/drivers/ch06/word_count

cd /root/drivers/ch06/word_count

2)建立驱动源代码文件

echo ‘’>word_count.c

3)编写makefile文件

Echo ‘obj-m := word_count.o’> Makefile  (obj-m表示将Linux驱动作为模块编译,obj-y表示编译进Linux内核)

Linux驱动依赖其它程序则需要这样编写makefile文件

Obj-m:=word_count.o

Word_count-y :=process.o data.o

2.编写Linux驱动程序的骨架(初始化和退出驱动)

Printk函数,Linux程序中出现,该函数用于输出显示日志信息

测试编译Linux驱动源代码

make –C /usr/src/linux-headers-3.0.0-15-generic M=/root/driver/ch06/word_count

安装Linux驱动

insmod word_ount.ko

查看word_count是否安装成功

lsmod | grep word_count

卸载Linux驱动

rmmod word-count

查看Linux驱动输出的日志信息

dmessg |grep word_count | tail –n 2 或者cat /var/log/syslog | grep word_count | tail –n 2

 LED为我闪烁:控制发光二极管向linux驱动发送数据可以控制LED小灯的开关,称其为LED驱动。虽然linux驱动直接与硬件打交道,但并不是linux驱动直接向硬件中的内存写数据,而是与本机的I/O内存进行交互,I/O内存就是通过各种接口连接主机的硬件在主机内存的映射。

3.开源协议、GPL协议、LGPL协议、BSD协议、Apachelicence2.0协议、MIT协议

4、注册和注销设备

extern int misc_register(struct miscdevice * misc)

extern int misc_deregister(struct miscdevice * misc)

还需要修改word_count.c文件中的word_count_initword_count_exit这两个函数

设备文件由主设备号和次设备号来标记的。主设备号统一都设置为10,是Linux系统中拥有共同特性的简单字符设备,称为misc设备,当成功注册了设备文件,misc_register函数返回非0的整数,失败返回0.

insmod word_count.ko

rmmod word_count

ls –a /dev

ls –l /dev

 

 

 

 

第七章  LED灯将为我:控制发光二极管

通过对这一章的学习,我学会了对LED灯的驱动过程,inux驱动发送数据控制LED灯的亮灭。

驱动控制LED灯我们需要创建LED驱动的设备文件:

第一步:使用cdev-init函数初始化cdev

第二步:指定设备号;

第三步:使用cdev-add函数将字符设备添加到内核中的字符设备数组中;

第四步:使用class-create;宏创建struct class

第五步:使用device creat函数创建设备文件;

卸载LED驱动的设备文件是需要依次调用1device-destory 2class-destory、和3unregistor-chrder-region(dev__t from,.unsigned count)

一、LED驱动的实现原理

软件驱动硬件:1Linux驱动与I/O内存通过ioread30iowrite32函数相交互;2I/O内存与硬件、内存管理模块负责同步I/O内存与硬件中的数据。

二、编写LED驱动程序

其中1表示开、0表示关,当字符串长度不足4个,后面用0补齐

1.创建LED的设备驱动文件

1)使用cdev_init函数初始化设备cdev

2)指定设备号                                  

Linux设备文件的设备号分为主设备号和次设备号,前12位主设备号,后20位表示次设备号。

设备号指定方法:直接在代码中指定(硬编码),动态分配

多个Linux设备文件可以拥有同一个主设备号。但两个设备的主设备号和次设备号不能都一样。

3)使用cdev_add函数将字符设备添加到内核中德字符设备数组中

4)使用class_create宏创建struct class

5)使用device_create函数创建设备文件

2.卸载Led驱动的设备文件

依次调用三个方法:

void device_destroy(struct class *class,dev_t devt)

void class_destroy(struct class *cls)

void unregister_chrdev_region(dev_t from,unsigned count)

3.设置寄存器与初始化LED驱动

4.控制LED

1)通过字符串控制LED

2)通过I/O命令控制LED

5.LED驱动的模块参数设置

如果Linux驱动中有多个模块参数,需要将这些参数用单引号或双引号括起来

三、测试led驱动

1.编写测试I/O控制命令的通用程序

2.使用NDK测试LED驱动

3.使用Java代码来测试led驱动的成功与否

cat /proc/devices(获取主设备及其主设备号)

5、指定 word_count_read 和word_count_write这两个回调函数

最常用的交互方式就是读、写设备文件。

6.实现方法

单词数使用int类型变量存储,Mem数组的长度为10000,而最后一个字符为“\0”,因此带统计的字符串最大长度为999

7.编译、安装、卸载Linux驱动程序

三、使用多种方式测试Linux驱动

1.使用Ubuntu Linux测试Linux驱动

2.Android模拟器上通过原生(NativeC程序测试Linux驱动

3.使用Android NDK测试Linux驱动

4.使用Java代码直接操作设备文件来测试Linux驱动

5.使用S3C6410开发板侧试Linux驱动

6.将驱动编译经Linux内核进行测试

四、使用eclipse开发和测试Linux驱动程序

1.eclipse中开发Linux驱动程序

1)建立C工程

2)建立C源代码文件链接

3)设置include路径

4)编译Linux驱动

2.eclipse中测试Linux驱动

1)导入test-word_count.c

2)设置include路径

3)建立Target

4Build工程

5)运行测试程序