上层通过读取节点/proc/oppo_smallboard_id的值来获取是否匹配,如果值是1,则表明匹配。

那么这个节点的值是怎么来的了,通过全局搜索可以发现在devices_list.c文件中有定义

static ssize_t mallboard_id_read(struct file *file, char __user *buf, size_t count, loff_t *pos)
{char temp_buffer[2];int num_read_chars = 0;num_read_chars += sprintf(temp_buffer, "%d\n",smallboard);num_read_chars = simple_read_from_buffer(buf, count, pos, temp_buffer, strlen(temp_buffer));return num_read_chars;
}static ssize_t  smallboard_id_write(struct file *file, char __user *buf, size_t count, loff_t *ppos)
{/*not support write now*/return count;
}
static const struct file_operations smallboard_id = {.write       = smallboard_id_write,.read      = smallboard_id_read,
};

上面可以看出定义了一个结构体 smallboard_id,并且定义了它的读写方法,写方法不支持,读方法调用了simple_read_from_buffer,这个方法的作用是讲内核的数据搞到用户空间。明显就是把smallboard的数据搞到节点proc/oppo_smallboard_id,多简单。那看看这个数据是怎么来的吧

static void smallboard_version_check(void)
{switch(get_project()) {int id0 = 0;id0 = mt_get_gpio_in(GPIO16);printk("smallboard_version_check id1 = %d\n",id0);if(id0 == 1)smallboard = SMALLBOARD_VERSION__1;elsesmallboard = SMALLBOARD_VERSION__0;break;}}printk("smallboard_version_check oppo_smallboard = %d\n",oppo_smallboard);
}

由函数mt_get_gpio_in名字都可以知道,是读取一个gpio的电压值,电压值不同表示不同的小板。

那么这个smallboard_version_check函数是谁调用的呢?

static int oppo_dev_platform_probe(struct platform_device *pdev)
{smallboard_version_check();proc_create("smallboard_id", 0666, NULL, &smallboard_id); return 0;
}

原来是在probe函数调用的,那么这个probe函数又是谁调用的呢?

肯定是register函数了,我们知道驱动注册都是调用probe函数啦,就是module_init函数

小板匹配 从上层到下层相关推荐

  1. usb转ttl小板pl2303hx_TTL刷机经验分享,刷机后实现软件随便安装,电视直播免费看...

    前言 之前已经介绍过很多方法,把闲置运营商盒子刷出全网通盒子,实现软件任意装,电视免费看,网络视频任意点播.刷机方法针对不同盒子,方法各异,但适应性最强的就是TTL刷机了.这些分享一点刷机经验和注意事 ...

  2. 基于运放AD8606的信号缓冲小板

    这是用于面包板实验的基于 AD8606 的信号缓冲电路板. 01设计与制作1 设计的电路板中包括有一个中间电压Splitter.一个直接电压信号涮涮,一个电容后额输入.一个同向电压跟随输出. ▲ 实验 ...

  3. 微星主板超频_微星垄断AMD、Intel平台内存超频记录 ITX小板惊人

    微星主板日前又创造了Intel平台的超频世界记录了,将内存频率进一步推向DDR4-5902MHz,更让人惊讶的是这次还是在微星Z390I GAMING EDGE AC这样一块ITX小板上创造的. 微星 ...

  4. Python正则表达式尽可能小的匹配(遇到第一个结束字符串就停止匹配)

    在写爬虫爬网页的时候,经常需要爬取里面的一大块代码,比如: <div>..................................</div></div>& ...

  5. 计算机系统层次中 从上层,在计算机系统层次结构中下层是上层的上层是下层的一个.ppt...

    在计算机系统层次结构中下层是上层的上层是下层的一个 计算方法 基本的计算方法,补码运算的基本方法 尤其注意的是乘法运算:掌握原码1位乘法.原码2位乘法,对于给定的两个数据,能使用莫衷方法进行运算,并写 ...

  6. 原装世嘉土星手柄(Sega Saturn)转USB小板,软硬件全开源

    上次用模块制作了一个SS手柄转USB的控制器, 原装世嘉土星SS手柄(Sega Saturn)改USB接口,实现低延时USB格斗手柄_f78fk_liuyu的博客-CSDN博客_土星手柄接口 使用良好 ...

  7. 安卓小游戏:小板弹球

    安卓小游戏:小板弹球 前言 这个是通过自定义View实现小游戏的第三篇,是小时候玩的那种五块钱的游戏机上的,和俄罗斯方块很像,小时候觉得很有意思,就模仿了一下. 需求 这里的逻辑就是板能把球弹起来,球 ...

  8. YC2440+wiggler小板+H-JATG+PCI转并口卡开发环境的搭建

    板子是很早就买了,只是当时过来厦门一趟实在麻烦,买个USB转并口线就往返了好几趟,那叫一个折磨,哎...加上课也紧,杂七杂八的事一耽搁,板子也就撂那了... 前两天再一次拿出板子,觉得很愧疚,必须得好 ...

  9. Nova Tek Hdmiout 小板调试总结

    NovaTek HDMI out小板调试 涉及知识点: 1.Mboot 添加命令行指令"hdmiout"; 2.Mboot 添加功能宏,可配置编译:// UConfig 3.Mbo ...

最新文章

  1. pandas使用pad函数向dataframe特定数据列的每个字符串添加后置(后缀)补齐字符或者字符串、向所有字符串的右侧填充、直到宽度达到指定要求(right padding)
  2. AIC+BIC+HQ+赤池信息量+贝叶斯信息量
  3. Linux 问题解决 :/lib/systemd/systemd-journald 占用内存过高
  4. BZOJ3799 : 字符串重组
  5. jQuery css-dom
  6. qt label显示文字_Qt官方示例共享内存
  7. java io操作_Java IO 操作
  8. hdu 4430 Yukari's Birthday (简单数学 + 二分)
  9. Android Studio同步失败设置代理,Android Studio如何设置代理?
  10. 分离数据库(Detach database).
  11. Keepalived+nginx实现高可用负载均衡
  12. [Golang] struct Tag说明
  13. java继承原理内存角度_Java编程的逻辑 (17) - 继承实现的基本原理
  14. 微信小程序流量主+直播开通和编码指南
  15. InVEST模型(生态系统服务)
  16. python中cv的差值_python+opencv实现移动侦测(帧差法)
  17. 计算机ps论文范文,ps论文范文
  18. Yocto系列讲解[理论篇]26 - BitBake全过程(4)
  19. 常见的注册表修改大全
  20. 北京退公交卡:网点排队110分钟 黄牛1分钟搞定 (zz)

热门文章

  1. 深度神经网络的不确定性(中)
  2. 为什么word一页没写完再写就去下一页了
  3. 【计算机和UNIX汇编原理④】——指令系统(上)【标志寄存器 立即寻址 寄存器寻址 直接/寄存器/基址/变址寻址 万字总结】
  4. 常见的OutOfMemoryError原因及解决方案
  5. 【今日CV 计算机视觉论文速览 第103期】Mon, 22 Apr 2019
  6. mysql 循环控制语句介绍
  7. Emoji表情过滤-手机键盘emoji表情完全过滤
  8. 【论文阅读】Learning with Hypergraphs: Clustering, Classification, and Embedding
  9. oppo锁频段_给大家科普下现在的OPPO Reno3支持哪几个5G频段
  10. oracle 1555错误,日志ORA-1555错误解决