linux 块设备驱动实例,linux驱动由浅入深系列:块设备驱动之一(高通eMMC分区实例)...
块设备驱动的模型还是基本基于字符设备驱动的,可以简单理解为块设备仅仅增加了操作缓冲区,对用户请求顺序进行队列重拍等等。字符设备驱动的相关分析可以查看本博客相关的博文。
按照本博客的行文习惯,在具体分析块设备驱动代码之前,我们会从整体上了解一下研究对象的特征,以及用户空间的使用方法。下面我们就自己写一个小工具(可以读取Rom中任意一个物理扇区的内容)来分析一下高通的分区信息。
在用户空间看到的块设备当然是以块设备节点展现的,如下图。其中mmcblk开头的就是今天我们分析的重点,可以看到这些文件名分为三类:mmcblk0、mmcblk0pX、mmcblk0rpmb。其中mmcblk0是设备节点,其余的为该设备的分区节点(mmcblk0rpmb RPMB是Replay Protected Memory Block的缩写,他的存在目的是用来给系统存放一些特殊的、需要进行访问授权的数据。暂时不做考虑)。Mmcblk0是当前系统的第一个mmc设备(为我们的eMMC存储器),如果插入tf卡,应该会出现mmcblk1设备。
下面我们来实现一个用户空间的小程序来读取eMMC中的原始数据进行分析。
我们在external/文件夹下建立radia_test.c、android.mk,代码如下:
radia_test.c/*************************************************************************
File Name: radia_test.c
Author: [email protected]
Created Time: 2017.6.9
brief:adjust audio parameters
************************************************************************/
#include
#include
#include
#include
#include
#include
#include
#include
#include
//extern int errno;
int get_disk_sector(int fd){
int sectorsize;
ioctl(fd, BLKSSZGET, §orsize) ;
return sectorsize;
}
/**
* read_disk_sector:
* @dev: raw disk FILE *
* @sector:
* return is the disk sectorsize
* */
int read_disk_sector(int fd, unsigned long sector, char **p){
int sectorsize;
FILE *fp;
/* get disk sector size */
sectorsize = get_disk_sector(fd);
if (sectorsize == 0){
fprintf(stderr, "get disk sector size failed\n");
return (-1);
}
/* seek it */
lseek(fd, 0 ,SEEK_SET);
//注,在offset设置得过大时,lseek可能返回OVERFLOW的错误,但实际上,它已经执行了定位,只是返回的值超出了范围。返回值为-1时,此时要判断一下错误号
if (lseek(fd, (sectorsize * sector), SEEK_CUR) == -1 ){
fprintf(stderr, "seek to %d failed\n"
, sectorsize * sector);
return (-1);
}
/* read it */
*p = (char *)malloc(sectorsize);
if (*p == NULL){
fprintf(stderr, "malloc memory fa
linux 块设备驱动实例,linux驱动由浅入深系列:块设备驱动之一(高通eMMC分区实例)...相关推荐
- linux驱动由浅入深系列:高通sensor架构实例分析之一
点击打开链接 本系列导航: linux驱动由浅入深系列:高通sensor架构实例分析之一(整体概览+AP侧代码分析) linux驱动由浅入深系列:高通sensor架构实例分析之二(adsp驱动代码结构 ...
- linux驱动由浅入深系列:高通sensor架构实例分析之三(adsp上报数据详解、校准流程详解)
本系列导航: linux驱动由浅入深系列:高通sensor架构实例分析之一(整体概览+AP侧代码分析) linux驱动由浅入深系列:高通sensor架构实例分析之二(adsp驱动代码结构)
- 如何在Linux系统下安装英特尔® Arc™系列独立显卡驱动以及进行AI推理性能测试...
点击蓝字 关注我们,让开发变得更有趣 作者 | 周兆靖 排版 | 李擎 如何在Linux系统下安装英特尔® Arc™系列 独立显卡驱动以及进行AI推理性能测试 目录 1.本文目的 2.Linux 系统 ...
- linux v4l2 示例程序,linux驱动由浅入深系列:camera驱动之二(基于高通平台的V4L2结构及代码分析)...
在上一篇文章中介绍了camera的基础知识和相关概念,我们一起来了解一下驱动相关的代码结构.本文以高通+android平台为示例,首先看一下整体框图: 这张图是从整体上来看的 1,图中最下面的是ker ...
- linux驱动由浅入深系列:camera驱动之二(基于高通平台的V4L2结构及代码分析)
在上一篇文章中介绍了camera的基础知识和相关概念,我们一起来了解一下驱动相关的代码结构.本文以高通+android平台为示例,首先看一下整体框图: 这张图是从整体上来看的 1,图中最下面的是ker ...
- linux驱动由浅入深系列:camera驱动之二(基于高通平台的V4L2结构及代码分析
点击打开链接 在上一篇文章中介绍了camera的基础知识和相关概念,我们一起来了解一下驱动相关的代码结构.本文以高通+android平台为示例,首先看一下整体框图: 这张图是从整体上来看的 1,图中最 ...
- arm oe linux gnueabi 系统,【技术分享】Quectel 4G模块Opencpu中实现高通wifi功能
导语 越来越多的IOT应用场景中需要使用4G模块,而在有些特定的场合需要把4G上网能力转化wifi功能,比如说无人机中视频传输,以及打印机行业中都有类似的应用案例,以便更好的提供给更多的客户端去使用. ...
- 8188gu驱动和su realtek_Realtek全系列官方网卡驱动
1.有线网卡系列: 81xx系列:理论可以完美驱动下面所有网卡(Lion和SL均可驱动) RTL8100E/RTL8101E/RTL8102E-GR/RTL8103E(L) RTL8102E(L)/R ...
- linux 播放 4k 视频,高通 S845 能录制 4K HDR 视频,但有哪些设备能看到呢?
Screenshot, UHD Alliance 高通发布了新世代 Snapdragon 845 SoC 后,大家可能都会留意到它支持录制 4K HDR 视频的能力,让大家用手机拍摄视频时也能有着更鲜 ...
- afe 高通_高通ASOC中的machine驱动
ASoC被分为Machine.Platform和Codec三大部分,其中的Machine驱动负责Platform和Codec之间的耦合以及部分和设备或板子特定的代码,再次引用上一节的内容:Machin ...
最新文章
- NOIP2012普及组 (四年后的)解题报告 -SilverN
- 三张內存变化图揭秘基本类型数组的初始化
- 匠心功能农业-农业大健康·弘本农业:对话农民丰收节交易会
- 【UVA11324】The Largest Clique (SCC)
- boost::fusion::filter用法的测试程序
- mysql数据转存到时序数据库_干货丨如何高速迁移MySQL数据到时序数据库DolphinDB...
- [UVa-437] Color Length
- Python使用xlwt和xlrd读写excel文件
- mysql 空字符串_NULL与MySQL空字符串的区别
- Smartisan OS ROM 小米手机 2/2S 标准版 刷机教程
- CSP202009-2 风险人群筛查(100分)【序列处理】
- Fragment中添加ListView而不使用ListFragment
- 【IRA/GSM/UCS2】the difference of IRA/GSM/UCS2 character set
- 【FPGA基础】四位二进制--格雷码转换器(vivado)
- 远控免杀专题(10)-TheFatRat免杀(VT免杀率22/70)
- 泛微协同办公e-cology9.0的Ecode二次开发实例说明
- excel教程自学网_5个口碑爆棚的自学网站,不花一分钱直接看教程
- 概念模型转化为逻辑模型规律
- KafkaStream之时间窗口WindowBy
- 一个简单的静态网页制作(html+css)