Linux内核mdio子系统

为什么要学习mdio子系统,因为一个新的硬件产品在开发之初,总是遇到这样或那样的问题,这其中包括网卡的问题。大部分soc内部有mac控制器,需要和外部phy芯片建立关联。mdio就是ethnet管理phy寄存器的桥梁。了解这些驱动的核心流程,才能尽快定位和调试软硬件问题。

参考内核源码版本:linux-5.3.4

阅读全文

ARM-LINUX根文件系统移植

概述

busybox是一个轻量级的嵌入式操作系统,可根据源码对其进行定制及编译。在某些应用场景下,可能需要完整的系统,此时,ubuntu和debian是不错的选择。可以通过其官网获取到arm版本的文件系统,然后通过定制来满足应用需求。

阅读全文

Linux内核调试之KGDB

KGDB调试ARM-LINUX内核

目标机内核配置

1.配置kgdb

阅读全文

Linux内核设备驱动模型

设备驱动模型概述

早期linux内核为设备驱动开发者提供了很少的基本功能接口:申请动态内存,保留I/O地址范围等。早期的硬件设备编程困难,即使属于同一总线上的两个不同硬件设备之间也很少有共性。因此,需要为设备驱动开发者设计一个通用的模型。现如今,情况不一样了。总线类型规范了硬件设备的内部设计,导致如今的即使是不同类型的设备都支持相似的功能,针对这样的设备的设备驱动应该关心以下实现:电源管理,即插即用和热插拔。系统中每一个硬件设备的电源都由内核来管理。比如一个电池供电的电脑进入“standby”模式,内核必须强制每一个硬件设备为低电状态。因此,每一个可以设定为”standby“状态的设备的驱动必须包含一个可以将硬件设备设定为低电状态的回调函数。同时硬件设备也要按照精确的顺序设定为”standby“状态,否则有些硬件设备可能进入错误的电源状态,例如,linux内核必须先将硬盘设定为”standby“状态,然后才是硬盘控制器,如果该顺序反了,硬盘控制器将不能给硬盘发送命令。为了实现该类的操作,Linux2.6提供了一些数据结构和函数接口,这些数据结构和接口为系统中所有的总线,设备和设备驱动提供了统一的操作方法。这个框架就叫做设备驱动模型。

阅读全文

Linux内核通知链

内核通知链

linux内核提供通知链机制,用来提供一种异步通知机制。实现原理是将一些异步事件的回调函数链接到一个链表头上,在某种特定情况下,通过遍历该链表以调用所有注册到该链表上的事件回调函数。

阅读全文

Qemu虚拟Arm开发板

实验说明

实验主机系统为debian9。ubuntu系统安装方法相似。可以通过qemu启动bootloader,再由bootloader启动内核,也可以直接由qemu启动内核。

阅读全文

ARM-LINUX中断系统

一.ARM中断处理流程

CPU每执行完一条指令,都会判断是否有异常发生,如果有异常发生,就跳转到相应的异常向量表的地址执行异常指令,该指令由软件设置,一般在系统内核启动的时候会设置异常向量表。

阅读全文

Linux内核之看门狗子系统

概述

​ linux看门狗子系统由其核心层和设备驱动构成,看门狗核心层向下为看门狗设备提供了注册和注销等接口,向上注册了一个通用的看门狗设备驱动(字符设备或杂项设备),该设备作为看门狗的抽象,屏蔽了不同看门狗设备的硬件操作之差异,向linux应用层提供了统一的读写和设置等通用接口。

阅读全文

Linux内核之虚拟文件系统

一.概述

Linux内核支持多种文件系统,它和其它unix变种一样,通过虚拟文件系统完成对不同文件系统的支持。第一个虚拟文件系统出现在1986年sun公司的微系统SunOS中,自此以后,大多数unix文件系统都包含VFS。Linux的VFS支持的文件系统最为广泛。

阅读全文

Hello World

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

阅读全文