- 博客(16)
- 资源 (8)
- 收藏
- 关注
原创 从零开始之驱动发开、linux驱动(六十六、内核调试篇--printk原理)
上一节我们已经看到了console的注册,prink的基础就是console,所以本节我们主要看内核中prink的实现。/** * printk - print a kernel message * @fmt: format string * * This is printk(). It can be called from any context. We want it t...
2019-04-30 21:59:20 3479 1
原创 从零开始之驱动发开、linux驱动(六十五、内核调试篇--串口驱动)
上一节我们分析了bootoader中传过来的cmdline中的命令是如何解析并执行的。同时也是对bootloader中传过来的console进行了记录。console也就是我们所说的控制台,可以是任何常见的输出设备,比如serial,比如framebuffer,比如网口。本节主要以最常见的串口为例说明。如果有搜索过内核代码,可以看到绝大多数的console都是串口设备。所...
2019-04-24 00:25:57 1527
原创 从零开始之驱动发开、linux驱动(六十四、内核调试篇--基础知识2[console的建立])
上一节我们分析的earlay的printk知识,本节主要分析一下在内核启动后的printk的知识。主要是通过下面函数实现的after_dashes = parse_args("Booting kernel", static_command_line, __start___param, __stop___param - __start___param, ...
2019-04-21 23:50:38 858
原创 从零开始之驱动发开、linux驱动(六十三、内核调试篇--基础知识1[earlyprintk建立过程])
我们知道,内核中使用__section设置了很多的段属性,使用段属性可以很方便的对函数调用时间分层。比如我们之前常见的subsys_initcall,就要比module_init更早的执行,因为subsys_initcall在驱动中通常是bus和class,驱动程序调用执行需要class和bus已经创建才能执行驱动函数。关于这点我之前的博文已经有过分析。https://blog....
2019-04-21 18:09:44 819
原创 linux设备模型十四(hotplug和mdev使用)
mdev有两个主要的用途:初始化常用设备和动态更新。这两个用途都要需要内核的sysfs的支持并且需要把sysfs挂载到/sys。对于动态更新来说,你也需要开启内核的热插拔功能。以下是几个典型的代码段,从初始化脚本摘录:[0] mount -t proc proc /proc[1] mount -t sysfs sysfs /sys[2] echo /sbin/mdev &...
2019-04-20 14:15:05 1793
原创 linux设备模型十三(mdev原理)
udev 和mdev 是两个使用uevent 机制处理热插拔问题的用户空间程序,两者的实现机理不同。udev 是基于netlink 机制的,它在系统启动时运行了一个deamon 程序udevd,通过监听内核发送的uevent 来执行相应的热拔插动作,包括创建/删除设备节点,加载/卸载驱动模块等等。mdev 是基于uevent_helper 机制的,它在系统启动时修改了内核中的uevnet_...
2019-04-18 23:02:56 2681
原创 linux设备模型十二(热拔插hotplug)
我们知道,一个最简单的字符设备驱动应该是下面这个形式。#include <linux/fs.h> #include <linux/init.h> /* 定义一个open函数 */static int first_drv_open(struct inode *inodep, struct file *filep){ return 0;}...
2019-04-15 00:24:58 2975
原创 从零开始之驱动发开、linux驱动(六十二、PL330 DMA控制器驱动)
pl330 dma驱动比较复杂,最近没时间研究这个的细节。这个稳定暂留,后面补上。
2019-04-14 20:07:51 960
原创 从零开始之驱动发开、linux驱动(六十一、PL330 DMA控制器)
一、DMA介绍首先简单介绍下什么是DMAC(Direct Memory Access Controller),DMAC 是一个自适应先进的微控制器总线体系的控制器,它由ARM公司设计并基于PrimeCell技术标准,DMAC提供了一个AXI接口用来执行DMA传输,以及两个APB接口用来控制这个操作,DMAC在安全模式技术下用一个APB接口执行TrustZone技术,其他操作则在非安全模式下执行...
2019-04-14 00:02:01 1888
原创 从零开始之驱动发开、linux驱动(六十、ARM AMBA总线介绍)
AMBA片上总线AMBA总线:AMBA总线是ARM研发的(Advanced Microcontroller Bus Architecture)提供的一种特殊的机制,可以将RISC处理器集成在其他IP芯核和外设中,它是有效连接IP核的“数字胶”,并且是ARM复用策略的重要组件。它不是芯片与外设之间的接口,而是ARM内核与芯片上其他元件进行通信的接口。2.0版本AMBA标准定义了三组总线:...
2019-04-12 23:09:39 1616
原创 从零开始之驱动发开、linux驱动(五十九、linux4.19的IIC驱动的编写和使用3)
本节不需要编写驱动,直接可以使用i2c-dev中编写号的驱动,来进行使用。也就是说这是一个完全的应用程序。程序在后面的代码仓库。这里说一下原理。正常情况下,每一个adaptor,都会在i2c_dev_init函数调用时创建一个设备在/dev/i2c-x这要求一个前提,adaptor必须在,i2c_dev_init执行之前先执行。内核的策略就是adaptor使用...
2019-04-08 22:11:51 866
原创 从零开始之驱动发开、linux驱动(五十八、linux4.19的IIC驱动的编写和使用2)
下面说的这种方式其实和前面的很相似1.在设备树文件中,设备所在的i2c总线下面定义好设备&i2c0 { status = "okay"; eeprom@50 { compatible = "atmel,24c02"; reg = <0x50>; }; };驱动只需要增加一个of_ma...
2019-04-08 19:48:49 776
原创 从零开始之驱动发开、linux驱动(五十七、linux4.19的IIC驱动的编写和使用1)
第一点,配置内核支持i2cDevice Drivers ---> I2C support ---> <*> I2C device interface [*] Autoselect pertinent helper modules I2C Hardware Bus s...
2019-04-06 00:35:01 1170
原创 从零开始之驱动发开、linux驱动(五十六、linux4.19的IIC驱动adaptor的注册)
上一节我们看到下面这函数了。/** * i2c_add_adapter - declare i2c adapter, use dynamic bus number * @adapter: the adapter to add * Context: can sleep * * This routine is used to declare an I2C adapter whe...
2019-04-02 00:06:15 951
原创 设备树学习(二十三、aliases节点分析)
在设备树中有一个叫做aliases的节点:/ { #address-cells = <1>; #size-cells = <1>; aliases { csis0 = &csis0; fimc0 = &fimc0; fimc1 = &fimc1; fimc2 = &fimc2; i2c0 = &i...
2019-04-01 23:00:02 7094
原创 从零开始之驱动发开、linux驱动(五十五、linux4.19的IIC驱动adaptor)
前面用了8节内容已经分析了2.6.35.7内核的iic驱动,可以发现,在linux中iic驱动还是稍微有些复杂的。在linux4.19内核中,其实百分之85~90还是和2.6内核的一样的。关于4.19的i2c,我大概会用两三节来进行分析,主要还是对硬件这个设备树引入后的变化分析。唯一不同的在于,linux内核引入设备树后,驱动层和硬件相关的内容都是通过设备树文件来指定。...
2019-04-01 00:06:09 1245 1
USB_HID的两篇官方文档
2019-01-10
51单片机移植的ucosii嵌入式操作系统
2018-07-22
基于51单片机移植的ucosii的代码
2018-07-22
基于51单片机写的一个多任务切换的简易OS
2018-07-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人