- 博客(125)
- 资源 (38)
- 收藏
- 关注
原创 Android Sensor Demo Framework实例
HAL 开发方式HAL Toolkit由用户开发Service服务及Service Runtime服务应用层, 用户需要开发应用程序以及对应的Service和Service Runtime。HAL层, 用户需要开发HAL模块, 设备代理对象HAL Framework使用Google提供的Framework Service提供的服务框架应用层, 用户只需要开发应用程序
2014-03-15 11:14:15
2093
原创 Android LED HVL Stub 实现
Vendor Hal Stub管理Hal Stub目前没有严格的标准 Interface(公布的方法)由各厂商决定 实现细节自己决定以products tree方式进行维护 易于管理 便于以后升级API & HAL stub开发流程开发LedService API设计Led Stub与LedService整合编写Led设备驱动开发设计测试
2014-03-15 10:56:47
1549
原创 Android HAL硬件抽象层
硬件抽象层硬件设备驱动包括对硬件操作进行封装的库以及协议等, 如显卡的2d库, 3d加速库, wifi协议等底层的基本的操作旧的硬件抽象层架构新的硬件抽象层架构旧的硬件抽象层架构Android App通过访问对应设备的服务访问设备,Service位于Application F
2014-03-14 16:51:25
1873
原创 Android系统烧写
fastboot烧写uboot内实现了fastboot协议,目标板进入uboot,进入fastboot模式,主机使用fastboot将指定的镜像烧到指定的分区recovery烧写按组合按键进入recovery模式,通过SD卡中的update.zip包进行烧写该方式进入linux内核,启动recovery镜像,通过界面选择烧写的软件包update.ziplivesuit烧写
2014-03-12 17:44:48
2886
原创 Android启动流程
Android启动流程硬件启动,加载Linux内核,挂载root文件系统init进程启动及Native服务启动System Server(蓝牙、GPS)及Android服务启动Home桌面启动init解释执行init.rc、init.xxx.rc[init.hardware.rc]Android启动过程分析init进程启动过程find ./syste
2014-03-12 17:36:41
1246
原创 Android Linux Kernel 移植流程
Android Kernel移植流程参考文档Documentation/android.txt修改kernel configAndroid DriverAndroid Binder:基于openBinder框架的驱动,进程间通信底层主要驱动,没有可它,android无法工作Android Logger:是一个轻量级的日志系统,在内核里是misc(杂项)设备驱动,
2014-03-12 17:30:28
3826
原创 Android编译环境搭建
Android编译环境搭建A Linux or Mac system. The Android build is routinely tested in house on recent versions of Ubuntu LTS (10.04), but most distributions should have the required build tools avai
2014-03-12 10:22:46
1266
原创 Google Android软件架构
Application Framework 应用程序框架层通过提供开放的开发平台,Android使开发者能够编制极其丰富和新颖的应用程序。开发者可以自由地利用设备硬件优势、访问位置信息、运行后台服务、设置闹钟、向状态栏添加通知等等,很多很多。开发者可以完全使用核心应用程序所使用的框架APIs。应用程序的体系结构旨在简化组件的重用,任何应用程序都能发布他的功能且任何其他应用程序可以使用这些功能(需要服从框架执行的安全限制)。这一机制允许用户替换组件。
2014-03-12 10:21:00
2026
原创 设备驱动(二十)
网络设备无设备节点基本功能:数据发送/接收关注点.probe申请资源,注册网络设备.open初始化硬件(参考芯片手册)发送队列(通知网络子系统可以发送数据包).stop关闭发送队列,复位硬件.hard_start_xinit数据发送函数(参考芯片手册).interrupt数据接收的中断处理网卡工作模
2014-03-06 18:12:08
938
原创 设备驱动(十九)
块设备以固定大小为单位访问支持随机访问,带缓冲块设备层次结构块设备子系统功能缓冲区管理优化,合并优化IO请求块设备驱动设备结构体 gendisk加载函数卸载函数 字符设备块设备操作集合file_operationsblock_device_operations.open对应o
2014-03-06 18:10:18
816
原创 设备驱动(十八)
在平台代码中添加device定义设备结构体struct i2c_board_info{}使用i2c_register_board_info注册添加驱动定义id_table数组struct i2c_device_id e2prom_ids={ {"24c02", 0}};驱动struct i2c_driver 24c02_deiver=
2014-03-06 18:03:56
860
原创 设备驱动(十七)
基于I2C子系统i2c-core:纽带;提供了一组通用的和硬件无关的接口函数I2C adapter driver :驱动总线产生时序i2c device driver:调用i2c-core中的函数完成i2c device driver的注册、注销和i2cmsg的封装i2c-dev在子系统中实现的通用i2c设备驱动,可用来访问任意i2c设备,为快速测试硬件I2C用户模式驱
2014-03-06 17:59:21
966
原创 设备驱动(十六)
ADCInput 0~3.3TSADCCON0[16] 转换精度[15] 结束标记位[14] 是否预分频[13,6] 分频值0xff[2] 0x0正常工作[1] 读操作时开始[0] 0x1开始转换TXDATX0 转换后的数字结果 [0, 11]CLRINTADC0模块许可加载函数注册字符设备注册中断 arch/arm/mach
2014-03-06 17:56:26
711
原创 设备驱动(十五)
开启设备的时钟struct clk *my_clk; //定义时钟结构体my_clk = clk_get(NULL, "watchdog"); //获取设备的时钟信息clk_enable(my_clk); //打开时钟clk_disable(my_clk); //关闭时钟所有有关时钟的设备,只有打开时钟后设置设备的寄存器才有效。看门狗驱动原理图
2014-03-06 17:55:59
1128
原创 设备驱动(十四)
GPIO控制LED一、原理图、芯片手册 GPC0_3/4 GPC0CON GPC0DAT二、驱动模块许可加载函数构建设备号申请设备号注册字符设备映射寄存器初始化设备卸载函数逆向卸载file_operations键盘驱动编写:一、原理图gph0 0~5gph2 6~7二、驱动
2014-03-06 17:55:30
915
原创 设备驱动(十三)
自动创建设备节点2.6内核支持devfs、udev两种方式创建设备节点2.6内核以后只支持udev在应用层自动创建设备节点udev有一个后台守护进程udev(嵌入式中有mdev,根文件系统中已经有mdev),会一直扫描/sys/class目录,自动创建和删除设备节点udev自动创建节点方式:1、创建设备分类struct class *myclass;myclas
2014-03-06 17:54:46
729
原创 设备驱动(十二)
设备模型内核对设备进行分类,以层次结构组织管理成为设备结构/sys/devices 下显示了所有的设备/sys/bus 按照总线分类显示了所有设备 /sys/class 按照功能类型分类显示了所有设备驱动和设备都会在总线上注册/sys/bus不需要总线的设备将会注册到flatform总线上为了达到驱动与平台的无关性使用设备
2014-03-06 17:53:59
811
原创 设备驱动(十一)
应用层申请内存malloc, calloc, realloc, free内核中申请内存申请/释放/映射按页分配(每页4K)unsigned long __get_free_pages(int gfp_mask, unsigned long order)得到的内存物理地址连续gfp_mask GFP_ATOMIC 不能分配也会返回GFP_KE
2014-03-06 17:50:06
768
原创 设备驱动(十)
获取时间1、jiffiesjiffies:从系统启动到当前,时钟中断产生的次数marco HZ 每秒产生的时钟中断次数,范围100~10002、使用do_gettimeofday函数延时1、长延迟以jiffy为单位的延迟叫长延迟(占用CPU)time_before(jiffies, new_jiffies)time_after(new_jiffi
2014-03-06 17:49:21
890
原创 设备驱动(九)
中断处理分为上下半部上半部:完成紧急的,不耗时的操作(ISR)下半部:不紧急,耗时的操作,一般使用内核延时机制执行下半部内核延时机制内核延时机制:内核在某个时间点调用执行指定的函数内核延时机制实现方式:tasklet/work queue/软中断(软中断不推荐)内核调度优先级内优先级中断 > tasklet > work queuetasklet
2014-03-06 17:48:50
827
原创 设备驱动(八)
Linux中断机制中断子系统对所有的中断源进行编号(中断号) 位置:linux-3.2/arch/arm/mach-s5pv210/include/mach/irqs.h判断中断源,执行相应的ISRIRQ_EINT(n)获取外部中断源中断号内核中存在中断描述表struct irq_desc irqdesc[];注册中断static inline
2014-02-18 09:47:09
756
原创 设备驱动(七)
IO模型阻塞非阻塞异步IO (信号驱动IO)IO多路复用(select poll epoll)阻塞与非阻塞等待队列头 wait_queue_head_t等待队列项 wait_queue_tread操作示例获取信号量判断是否有数据有数据,copy_to_user没数据,使用以下方式释放信号量判断是否是非阻塞若是非阻塞,返回EAGAIN若是阻塞,在等
2014-02-18 09:45:13
987
原创 设备驱动(六)
设备的并发访问互斥访问方式屏蔽中断原子操作自旋锁(关抢占, 自旋时处于运行状态, 忙等待)信号量 semaphore互斥添加位置 在具体的file_operations中添加互斥操作,例如在read, write中添加互斥操作自旋锁使用条件持有自旋锁的时间尽可能短持有锁时间严禁睡眠自旋锁使用方式spinlock_t l
2014-02-18 09:41:37
785
原创 设备驱动(五)
开发板与发行版编码规范MakefileDEBUG = n //开发板测试版标识ifeq ($(DEBUG),y) EXTRA_CFLAGS += -DHELLO_DEBUG //根据DEBUG,动态配置编译参数,在命令行添加宏endifobj-m += hello.oall: make -C /
2014-02-18 09:33:03
691
原创 设备驱动(四)
实现操作集合实现open统计计数,检查错误申请资源识别次设备号,如果必要更新f_op指针实现realseopen逆操作实现实现read copy_to_user返回值为未被读取的字节数实现write copy_from_user 返回值为未被读取的字节数实现unlock
2014-02-18 09:19:01
734
原创 设备驱动(三)
设备分类 字符设备块设备网络设备访问方式顺序访问,字节为单位随机访问,固定大小为单位访问 设备键盘,键盘磁盘[扇区],FLASH[读:页,写:块] 有无缓冲没有有 有无设备文件有有没有设备号dev_t devno; //32位的
2014-02-18 09:17:24
946
原创 设备驱动(二)
模块传参#include #include #include #include #include #define DRIVER_AUTHOR "Foobar"#define DRIVER_DESC "A sample driver"MODULE_LICENSE ("GPL");MODULE_AUTHOR (DRIVER_AUTHOR);
2014-02-18 09:14:34
807
原创 设备驱动(一)
驱动是模块程序,模块程序不一定都是驱动模块三要素模块许可声明MODULE_LICENSE("GPL");加载函数默认是int init_module(void)成功返回0失败返回负数错误码卸载函数默认是void cleanup_module(void)模块与应用程序的区别 modulesapp运行空
2014-02-18 09:10:22
1369
转载 持续近40年的战争 X86系列CPU大史记
X86系列CPU大史记(1) 编者按:这是一篇强文,虽然从出文到现在已经一年的时间了,但是编者认为,作为历史来说是永远不过时的。就象司马迁的《史记》一样,到今天仍是经典。但毕竟时间已经进入2006年,因此,我对最后一部分内容作了少许改动。如有不妥,望见谅。 [前言] 计算机中最重要的是什么?毫无疑问是CPU,即中央处理器(微型处理器),它在计算机中的地位是
2014-02-08 20:58:35
2598
转载 软件版本Beta,RC,Release,Demo,Build
版本总结版本号:V(Version):即版本,通常用数字表示版本号。(如:EVEREST Ultimate v4.20.1188 Beta )Build:用数字或日期标示版本号的一种方式。(如:VeryCD eMule v0.48a Build 071112)SP:Service Pack,升级包。(如:Windows XP SP 2/Vista SP 1)授权和功能划
2014-02-08 13:10:20
1278
原创 SQLite install
背景Ubuntu 12.04SQLite 3.8.2下载源码去sqlite官方下载源码sqlite-autoconf-3080200.tar.gz。解压tar包.安装查看README和INSTALL文档知道sudo ./configuresudo make install测试执行sqlite3 test.db
2014-01-14 21:37:28
1410
原创 Linux下进程间通信
Linux下进程间通信概述Linux下的进程通信基本上是从UNIX平台上的进程通信继承来的。而对UNIX发展做出最大贡献的俩大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程的通信方面的侧重点有所不同。前者是对UNIX早期的进程间通信手段进行了系统的改进和扩充,形成了“System V IPC”,其通信主要局限在单个计算机内;后者跳出了该限制,形成了基于套接字(
2014-01-06 15:23:34
1176
原创 C语言 线程同步互斥生产者消费者
gcc producer_and_consumer.c -pthread#include #include #include #include #include #include #include #define PRODUCER_NUM 10#define CONSUMER_MUM 8#define BUFFER_SIZE 20#define SLEEP_TIME 1
2014-01-04 23:10:02
2838
原创 虚拟内存技术
1 虚拟内存技术1.1虚拟地址(逻辑地址) 操作系统中申请的物理空间,都会映射到虚拟地址上。然后可通过虚拟地址访问物理空间。1.2 内存页面 操作系统分配(映射)物理空间时,以页为单位 malloc申请的空间后台会用一定的数据结构来管理 brk/sbrk申请的空间后台会维护一个位置 mmap申请的空间由程序员自己管理1.3 sbrk(i
2013-12-30 09:28:38
970
原创 C语言内存管理
首先简单介绍一下概念:程序:在磁盘保存的可以运行的文件进程:正在运行的程序,存在于内存中一个进程空间被划分为以下部分:1)代码区:要执行的程序被放入此区,只读区域2)全局区:保存全局变量,mian函数执行前分配3)BSS段:保存未初始化的全局变量,BSS段在mian函数执行前会被清04)栈区:保存局部变量(包括函数参数),内存分配释放都是自动进行的5)堆区:也叫自由
2013-12-29 17:02:17
970
转载 二叉树遍历之非递归算法
在前一篇文章二叉树遍历递归算法对二叉树遍历的递归算法做了总结,这篇文章就来对二叉树遍历的非递归算法做个汇总。还是与上一篇文章一样的顺序,一一汇总先序、中序、后序以及层序遍历的非递归算法。1、先序遍历(非递归算法)先序遍历非递归访问,使用栈即可实现。先序遍历的非递归访问在所有的遍历中算是最简单的了。主要思想就是先将根结点压入栈,然后根结点出栈并访问根结点,而后依次将根结点的右
2013-12-23 22:04:21
1712
原创 结构体与共用体
结构体结构体是用户定义的新数据类型,在结构体中可以包含若干个不同数据类型和不同意义的数据项(相同也可以),从而使这些数据项组合起来反映某个信息。不考虑内存补齐,结构体占用的空间为所有元素占用的总空间。//此声明声明了拥有3个成员的结构体,分别为整型的a,字符型的b和双精度的c//同时又声明了结构体变量s1//这个结构体并没有标明其标签struct { in
2013-12-16 20:25:14
1614
1
原创 C语言内存管理
局部变量全局变量存储类别autoregisterstatic局部static全局外部全局存储区栈寄存器静态存储区(存放字符串)生命期函数调用期间程序整个运行期间作用域代码块内本文件本文件及其他文件(其他文件需要用extern声明后使用)赋初值每次函数调用时编译时赋初值,只赋值
2013-12-16 19:33:05
876
转载 buntu 12.04 安装VMware Tools无法找到kernel header path的问题
在使用VMware的共享文件夹时,需要虚拟机操作系统安装VMware Tools。Ubuntu 12.04 安装 VMware Tools,运行vmware-config-tools.pl 时,总是提示The path "" is not valid.What is the location of the directory of C header files that match y
2013-12-13 13:43:43
1854
原创 gcc基本用法
Gcc最基本的用法是:gcc [options] [filenames]-c,只编译,不连接成为可执行文件,编译器只是由输入的.c等源文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。-o output_filename,确定输出的文件的名称-g,产生符号调试工具(GNU的gdb)所需要的符号资讯-O,对程序进行优化编译,连接,采用该项,这样产生的可执行文件效率可
2013-12-13 10:31:28
852
uml2tools for eclipse
2013-08-21
Mac cmake 与 lldb 手动按照
2020-12-13
SD卡物理层规范学习套装.zip
2014-05-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅