自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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的两篇官方文档

Device Class Definition for Human interface Devices和 HID Usage Tables两篇官方文章,保存起来,已被更换电脑后用

2019-01-10

read-copy-update

linux锁机制的经典文档,read - copy - update。来自linux社区。

2018-09-25

输入子系统编程模板

尴尬,我自己的某个博客要用。这个东西我不想设置分数的,结果不能为0分。

2018-07-29

51单片机移植的ucosii嵌入式操作系统

对ucosii中不必要的内容进行了裁剪。因为51单片机的idata很小,这份代码用了51单片内部的idata作为当前运行任务的任务栈,其它没被运行的任务的栈则被放置在内存较大的xdata区。但因为51单片机的汇编语句少,简单,可以作为其他处理器移植ucosii的模版和参考,同时也是学习51单片机递增以及高级应用的实例。

2018-07-22

基于51单片机移植的ucosii的代码

对ucosii中不必要的内容进行了裁剪。这份代码用了51单片内部的idata作为任务栈,因为51单片机的idata很小,所以这份代码可以运行的任务数量比较少。但因为51单片机的汇编语句少,简单,可以作为其他处理器移植ucosii的模版和参考。

2018-07-22

基于51单片机写的一个多任务切换的简易OS

里面代码是本人亲自手写的一个基于51单片机的多任务切换代码,核心代码只有不到200行,可以从代码层面方便单片机开发者了解任务切换的原理和使用,里面没有使用任何复杂的算法。

2018-07-22

linux0.11源代码

里面包含有linux0.11版本的原版代码和 赵炯博士对里面所有代码的注释。

2018-07-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除