块设备驱动的模型还是基本基于字符设备驱动的,可以简单理解为块设备仅仅增加了操作缓冲区,对用户请求顺序进行队列重拍等等。字符设备驱动的相关分析可以查看本博客相关的博文。

按照本博客的行文习惯,在具体分析块设备驱动代码之前,我们会从整体上了解一下研究对象的特征,以及用户空间的使用方法。下面我们就自己写一个小工具(可以读取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分区实例)...相关推荐

  1. linux驱动由浅入深系列:高通sensor架构实例分析之一

    点击打开链接 本系列导航: linux驱动由浅入深系列:高通sensor架构实例分析之一(整体概览+AP侧代码分析) linux驱动由浅入深系列:高通sensor架构实例分析之二(adsp驱动代码结构 ...

  2. linux驱动由浅入深系列:高通sensor架构实例分析之三(adsp上报数据详解、校准流程详解)

    本系列导航: linux驱动由浅入深系列:高通sensor架构实例分析之一(整体概览+AP侧代码分析) linux驱动由浅入深系列:高通sensor架构实例分析之二(adsp驱动代码结构)

  3. 如何在Linux系统下安装英特尔® Arc™系列独立显卡驱动以及进行AI推理性能测试...

    点击蓝字 关注我们,让开发变得更有趣 作者 | 周兆靖 排版 | 李擎 如何在Linux系统下安装英特尔® Arc™系列 独立显卡驱动以及进行AI推理性能测试 目录 1.本文目的 2.Linux 系统 ...

  4. linux v4l2 示例程序,linux驱动由浅入深系列:camera驱动之二(基于高通平台的V4L2结构及代码分析)...

    在上一篇文章中介绍了camera的基础知识和相关概念,我们一起来了解一下驱动相关的代码结构.本文以高通+android平台为示例,首先看一下整体框图: 这张图是从整体上来看的 1,图中最下面的是ker ...

  5. linux驱动由浅入深系列:camera驱动之二(基于高通平台的V4L2结构及代码分析)

    在上一篇文章中介绍了camera的基础知识和相关概念,我们一起来了解一下驱动相关的代码结构.本文以高通+android平台为示例,首先看一下整体框图: 这张图是从整体上来看的 1,图中最下面的是ker ...

  6. linux驱动由浅入深系列:camera驱动之二(基于高通平台的V4L2结构及代码分析

    点击打开链接 在上一篇文章中介绍了camera的基础知识和相关概念,我们一起来了解一下驱动相关的代码结构.本文以高通+android平台为示例,首先看一下整体框图: 这张图是从整体上来看的 1,图中最 ...

  7. arm oe linux gnueabi 系统,【技术分享】Quectel 4G模块Opencpu中实现高通wifi功能

    导语 越来越多的IOT应用场景中需要使用4G模块,而在有些特定的场合需要把4G上网能力转化wifi功能,比如说无人机中视频传输,以及打印机行业中都有类似的应用案例,以便更好的提供给更多的客户端去使用. ...

  8. 8188gu驱动和su realtek_Realtek全系列官方网卡驱动

    1.有线网卡系列: 81xx系列:理论可以完美驱动下面所有网卡(Lion和SL均可驱动) RTL8100E/RTL8101E/RTL8102E-GR/RTL8103E(L) RTL8102E(L)/R ...

  9. linux 播放 4k 视频,高通 S845 能录制 4K HDR 视频,但有哪些设备能看到呢?

    Screenshot, UHD Alliance 高通发布了新世代 Snapdragon 845 SoC 后,大家可能都会留意到它支持录制 4K HDR 视频的能力,让大家用手机拍摄视频时也能有着更鲜 ...

  10. afe 高通_高通ASOC中的machine驱动

    ASoC被分为Machine.Platform和Codec三大部分,其中的Machine驱动负责Platform和Codec之间的耦合以及部分和设备或板子特定的代码,再次引用上一节的内容:Machin ...

最新文章

  1. NOIP2012普及组 (四年后的)解题报告 -SilverN
  2. 三张內存变化图揭秘基本类型数组的初始化
  3. 匠心功能农业-农业大健康·弘本农业:对话农民丰收节交易会
  4. 【UVA11324】The Largest Clique (SCC)
  5. boost::fusion::filter用法的测试程序
  6. mysql数据转存到时序数据库_干货丨如何高速迁移MySQL数据到时序数据库DolphinDB...
  7. [UVa-437] Color Length
  8. Python使用xlwt和xlrd读写excel文件
  9. mysql 空字符串_NULL与MySQL空字符串的区别
  10. Smartisan OS ROM 小米手机 2/2S 标准版 刷机教程
  11. CSP202009-2 风险人群筛查(100分)【序列处理】
  12. Fragment中添加ListView而不使用ListFragment
  13. 【IRA/GSM/UCS2】the difference of IRA/GSM/UCS2 character set
  14. 【FPGA基础】四位二进制--格雷码转换器(vivado)
  15. 远控免杀专题(10)-TheFatRat免杀(VT免杀率22/70)
  16. 泛微协同办公e-cology9.0的Ecode二次开发实例说明
  17. excel教程自学网_5个口碑爆棚的自学网站,不花一分钱直接看教程
  18. 概念模型转化为逻辑模型规律
  19. KafkaStream之时间窗口WindowBy
  20. 一个简单的静态网页制作(html+css)

热门文章

  1. 谷歌浏览器-开发者工具 提示:Drop HAR files here,解决方案
  2. ipad/andriod 最新8.22协议,技术交流 协议定制 软件定制
  3. 我想找个这样的男朋友,要求高吗?
  4. mysql线上数据库单表超过200G的处理
  5. 分享 :数据挖掘的三把利器(提分三板斧)
  6. 亚马逊fire充不上电_我拥有哪种Amazon Fire Tablet模型?
  7. Facebook 会成为下一个电商巨头吗?
  8. 现在做自媒体能赚钱吗?看完这篇文章你就明白了
  9. 使用Java调取C++动态库
  10. [职业生涯] 运维工程师的职责和前景