摘要:
根据Linux内核发布模型,总共有三种类型的活跃内核发布:主线版本、稳定版本和长期支持(LTS)版本。首先,由子系统维护者收集和准备bug修复和新特性,然后提交给Linus Torvalds,以便他将它们包含在自己的Linux树中,称为主线Linux树,也称为主Git存储库。这就是每个稳定版本的来源 阅读全文
摘要:
编写代码并不总是内核开发中最难的部分。调试是真正的瓶颈,即使对于有经验的内核开发人员也是如此。也就是说,大多数内核调试工具都是内核本身的一部分。有时,内核通过称为Oops的消息来帮助查找错误的起源。调试可以归结为分析消息。 Oops 和 panic分析 Oops是当发生错误或未处理的异常时由Linu 阅读全文
摘要:
方法一 static inline int test_bit(int nr, const volatile void * addr) { return (1UL & (((const int *) addr)[nr >> 5] >> (nr & 31))) != 0UL; } 方法二 #includ 阅读全文
摘要:
如何精确控制驱动程序的log输出? 一、设定Level等级 enum { DRV_MSG_ERR = 0x0001, DRV_MSG_WARN = 0x0002, DRV_MSG_INFO = 0x0004, DRV_MSG_DEBUG = 0x0008, DRV_MSG_XXX1 = 0x0010 阅读全文
摘要:
Note: 本文主要列举几个usb设备驱动实例 一、“USB LED”驱动模块 在前面的实验室中,开发了一个功能齐全的USB HID设备的固件,该设备能够通过使用HID报告发送和接收数据。现在,将开发一个Linux USB主机驱动程序来控制USB设备。驱动将发送USB命令切换PIC32MX470开发 阅读全文
摘要:
USB(通用串行总线的缩写)被设计为一种低成本的串行接口解决方案,总线电源由USB主机提供,以支持广泛的外围设备。USB最初的总线速度是1.5 Mbps的低速,然后是12 Mbps的全速,然后是480 Mbps的高速。随着USB 3.0规范的出现,超级速度被定义为4.8 Gbps。最大数据吞吐量,即 阅读全文
摘要:
方法一: interrupts-extended: 指定中断和父中断的另一种形式,允许多个父中断。这优先于'interrupts'和'interrupt-parent'。 #interrupt-cells = <2>; interrupts-extended = <&gpio1 6 0>, <&gp 阅读全文
摘要:
转自:https://barryx.cn/build_bootlin_elixir 平时经常使用elixir.bootlin.com查看内核源码,很方便。但是苦于该站点服务器在国外,国内用起来很卡很慢,所以想着自己在本地搭一个。 使用环境 Host:Ubuntu 20.04 (Kernel 5.15 阅读全文
摘要:
在本地搭建 Bootlin elixir 查阅内核代码的时候,每当执行到 python3 update.py 这一步骤的时候,终端上总会报“ctags: Unknown option: --kinds-c”这个warning,执行完成以后在浏览器打开bootlin的页面,会发现ident功能不能用( 阅读全文
摘要:
结构及宏定义 struct i2c { unsigned int scl; unsigned int sda; }; #define I2C_ACK 0 /* PD_SDA level to ack a byte */ #define I2C_NOACK 1 /* PD_SDA level to n 阅读全文