随笔分类 - Linux
I love Linux as i hate Linux.
摘要:2023-05-04 关键字: 该驱动可通过dts配置属性,可在/dev创建节点,支持对/dev下的节点进行标准IO读写以及ioctl读写。 dts如下: ir_cut { status = "okay"; compatible = "chorm, ir-cut"; gpios = <&gpf 0
阅读全文
摘要:2023-01-11 关键字:container_of、内存对齐 1、示例 container_of是定义在linux内核kernel.h中的一个宏,它的作用是根据结构体中某个成员的地址反推出该结构体的地址。 container_of之所以能做到这点,得归功于linux的内存管理方式在逻辑上是连续的
阅读全文
摘要:2022-08-18 场景 存在两个角色,一个是“发布者”,另一个是“订阅者”。双方均处于同一局域网。发布者定时向局域网内所有主机发布消息,订阅者负责接收这一消息。 实现 在linux环境下,使用C语言基于UDP的广播来实现是最便捷的。并且在同一局域网内几乎不用担心UDP的通信可靠性问题。 发布者示
阅读全文
摘要:2022-03-24 关键字: 在做Linux系统开发时经常会用到menuconfig来裁剪内核功能模块或控制应用功能,menuconfig的可视化配置大大降低了复杂程序功能配置的难度与出错几率。 在纯应用开发中,当其复杂到一定程度时,功能的可配置性也是必然会引入的功能之一。若单纯靠人工在Makef
阅读全文
摘要:2021-08-19 关键字: 1、内核空间与用户空间数据交换方式 分两种情况: 1、需要交换的数据量较大时; 2、需要交换的数据量较小时; 第一种情况使用以下的函数: unsigned long copy_to_user(void __user* to, const void* from, uns
阅读全文
摘要:2021-08-10 关键字:中断的概念 1、中断的概念与分类 中断说白了就一句话:临时去处理一下其它事。 这个“其它事”具有以下特点: 1、突发性; 2、短暂性; Linux驱动开发中的中断分类方式较多,大体上可分为以下三个类别: 1、硬中断与软中断; 2、外部中断与内部中断; 3、同步中断与异步
阅读全文
摘要:2021-08-03 关键字:竞态解决方案、同步 驱动开发中共有四种方式可以解决并发竞态问题: 1、原子变量; 2、自旋锁; 3、信号量; 4、完成量; 原子变量的功能是通过硬件来操作变量的值,使该变量的值在更替过程中是原子式的,解决了在内核中因调度导致某变量在变值中途被打断从而影响到最终结果的情况
阅读全文
摘要:2021-07-06 关键字:主设备号、次设备号 1、什么是设备号 设备号是Linux驱动开发中的术语。 Linux规定每一个字符设备或块设备都必须拥有一个专属设备号。要想在Linux平台开发驱动程序,申请设备号就是开发过程的第一步,只有有了设备号,才能向系统注册设备。 一个设备号由以下两个模块组成
阅读全文
摘要:2021-06-30 一、简介 menuconfig是Linux平台用于管理代码工程、模块及功能的实用工具。上至决定某一程序模块是否编译,下到某一行具体的代码是否需要编译以及某个项的值在本次编译时该是什么都可由menuconfig来定义。 menuconfig的使用方式通常是在编译系统之前在系统源代
阅读全文
摘要:2021-05-25 关键字:iptables入门、Linux防火墙入门、基础知识 1、什么是iptables? iptables 顾名思义就是一张记载IP信息的表格。从名称描述上来看就能知道它与网络通信有关。 事实上,iptables是一个运行在Linux平台的用户层的防火墙工具。 何谓用户层呢?
阅读全文
摘要:2021-04-25 关键字:串行接口、串口属性设置 1、什么是串口? 串口(Serial Port)是一种常见的计算机接口,由于它所需的连线少、通信控制简单且成本低廉,在行业内,尤其是嵌入式领域内得到了广泛的使用。 串口是一种通信方式,其包含了多种接口标准,其中最常见的是:RS232标准。即9针D
阅读全文
摘要:2021-03-17 关键字:移远EC204G模组、Linux平台的4G模块移植 移远EC20是一款4G模组,支持基于普通手机卡的2G、3G及4G网络。 这款模组在Linux系统中最终是以USB协议通信的,因此在适配之前必须保证Linux系统的USB驱动功能完好。 适配的过程虽然主要围绕着Quect
阅读全文
摘要:2021-02-28 关键字:active_low、电平转换 这篇文章讲述了在Linux平台开发GPIO驱动程序时如何用“正确的姿势”读取其电平状态。 不知所云?简单说就是:你通过命令 cat 出来的某个引脚的电平值可能和你预想的不一样,例如,从原理图上看按下某个按扭它怎么都应该识别到低电平的,可实
阅读全文
摘要:2020-06-04 关键字:Option60、新增Option、插入一个Option 1、DHCP是什么? DHCP 全称 Dynamic Host Configuration Protocol,动态主机配置协议。 说人话就是用于路由器给各个电脑、手机、网络设备分配各种地址以使设备能访问网络用的,
阅读全文
摘要:2020-05-23 关键字:kmalloc、kzalloc、kcalloc 1、kmalloc() kmalloc() 是Linux内核开发中最常使用的申请内存的函数。它的原型如下所示: #include <linux/slab.h> void *kmalloc(size_t size, int
阅读全文
摘要:2020-05-18 关键字:timer_list定时器、jiffies机制 1、jiffies Linux内核一般都通过 jiffies 来获取系统的当前时间。 jiffies 是一个被定义在 <linux/jiffies.h> 中的 unsigned long 型的变量。这个变量的值由内核自动设
阅读全文
摘要:2020-04-26 关键字:printk_ratelimit、printk_ratelimited 在Linux内核开发中,几乎所有的日志、信息的打印都是通过 printk() 函数实现的。 printk 首先会将所有来自程序的信息都放到一个缓冲区中,然后各个“监控程序”再根据自己的需要将这些信息
阅读全文
摘要:2020-04-22 关键字:socket通信时的底层调用流程 这篇文章简单记录一下在Linux环境下使用C语言做 socket 通信时的一些流程。 1、sockfd的由来 典型的C语言建立socket通信的第一行代码基本都如下所示: int sockfd = socket(AF_INET, SOC
阅读全文
摘要:2020-03-27 关键字: 在 Linux 内核开发,通常是嵌入式领域的内核开发过程中,难免会有需要访问文件系统中的文件的需求。 但 Linux 内核中可没有像在用户态那样有文件IO和标准IO可以直接对文件进行 open()/fopen() , read()/fread() , write()/
阅读全文
摘要:2020-03-23 关键字: 在Linux外设开发时,用于CPU与外设之间通信的方式主要有以下三种: 1、轮询 2、中断 3、DMA 1、轮询 轮询法是最简单的通信方式。它仅需要开一个无限循环来不断地查询要通信的外设的状态,从而决定是否与之通信。其极为简单的开发方式所带来的后果就是它非常消耗CPU
阅读全文

浙公网安备 33010602011771号