
Linux内核
文章平均质量分 68
分析介绍linux内核相关的知识。
麻辣小新
嵌入式linux一线开发者一枚,《嵌入式Linux设备驱动程序开发指南》译者之一。
展开
-
搭建arm64的qemu环境
qemu在调试内核方面还是比较方便、效率的。以前基本上多是用arm32的平台,网上大部分资源也是关于arm32的。现在arm64的也比较普遍了,最近刚好要看一些内核的东西,花了2天的时间搭建了这个环境,希望看到的朋友少走弯路,节约点时间。本文主要包含3部分内容:1.安装qemu虚拟机,2.配置网络,3.虚拟机挂载NFS。因为每个人的环境还是有点差异的,搭建的过程中需要根据自己的实际情况做些更改。原创 2022-10-13 17:13:01 · 3962 阅读 · 1 评论 -
git生成patch
生成patch的两种方式1.git diff#只想 patch Test.java 文件git diff Test.java > test.patch# 把所有的修改文件打成 patchgit diff > test.patch2.git format-patch$ git format-patch HEAD^ #生成最近的1次commit的patch$ git format-patch HEAD^^ #生成最近的2次commit的patch$ git原创 2021-07-04 21:53:47 · 12213 阅读 · 0 评论 -
V4L2之mmap()函数
前言我们经常使用mmap函数,它到底是怎么实现的呢?今天就来说说。。。读者朋友是不是有这样的疑问:1.在调用mmap()后,它的返回值到底是什么?又是怎么来的呢?2.我们在驱动中实现static int xxx_drv_mmap(struct file *filp, struct vm_area_struct *vma)的参数为什么是这样的?它跟我们的mmap()函数参数完全不沾边啊。3.在linux底层驱动的实例中是怎么实现的?做了哪些事情呢?函数使用映射#include <sys/原创 2021-09-18 17:32:04 · 2067 阅读 · 0 评论 -
Linux系统中的延时
内核延时如果是短延时,比如不超过几毫秒,可以用下面的方式,比如最小1ms;因为软件定时器一般用于长延时。1.下面这三个是忙等待,比较精确include <linux/delay.h> void ndelay(unsigned long nsecs); //纳秒void udelay(unsigned long usecs); //微秒void mdelay(unsigned long msecs); //毫秒2.下面的函数会引起休眠原创 2021-04-27 17:39:19 · 2802 阅读 · 0 评论 -
sysfs文件系统分析
sysfs实现的功能为用户空间提供一个层级视图结构。提供统一的引用计数。分别用show和store来提供属性数据的导出导入。可向用户空间发送信号。ps:实现的诀窍就是将kobject和文件目录(directory entries)联系起来。相关的结构体struct kobject { const char *name; //kobject 的名称 struct list_head entry; //连接下一个kobject结构 struct kobject *parent;原创 2021-07-05 22:20:25 · 471 阅读 · 0 评论 -
sys文件系统调节lcd背光
sys的位置/sys/class/backlight/lcd_backlight@0cat max_brightness //获取最大的亮度:100cat actual_brightness //获取实际的亮度:80echo 100 > brightness //设置亮度为100echo 80 > brightness //设置亮度为80驱动位置:/drivers/pwm/pwm-imx.c //imx的和cpu相关的pwm操作。/drivers/pwm/core.c/dr原创 2021-06-24 17:48:02 · 1342 阅读 · 0 评论 -
linux中的同步机制
内核抢占定义:进程正在执行内核函数时,即它在内核态运行时,允许发生内核切换(即当前进程被新的进程替换)。关键点:不管是抢占内核还是非抢占内核,运行在内核态的进程都可以自动放弃cpu。这种称之为计划性进程切换。比如无法获取到资源而转入睡眠状态。在抢占型内核中,由异步事件引起的进程切换,称之为强制性进程切换。比如中断处理函数唤醒了高优先等级的进程。禁止抢占的条件:如果current_thread_info->tHRead_info->preempt_count的值大于0就禁止抢占。在以下原创 2021-07-05 22:18:03 · 483 阅读 · 0 评论 -
linux中的信号
信号信号的作用让一个进程知道某个事件已经发生 让一个进程执行信号处理函数信号基本情况Linux中很多信号,有些信号与体系无关,但是像SIGCHLD或者SIGSTOP这样的信号是与体系结构相关的;另外想SIGSTKFLT这样的一些信号只为特定的体系结构而定义。它们都有默认的操作。0-31为常规信号,32-64为实时信号.它们的区别:常规信号:不进行排队,发送多次也只有一个信号被进程接收到。实时信号:排队,多次发送的每个信号都会被进程接收到。注意:linux系统并不使用实时信号,原创 2021-04-26 17:51:45 · 874 阅读 · 0 评论 -
linux内核之Per-CPU变量
最好的同步技术就是把不需要同步的内核放在首位。因为每种显示的同步原语都有不容忽视的开销。本质:Per-cpu变量主要是数据结构的数组,每个cpu对应数组中的一个元素。位置:Per-cpu数组在主存中被排列,以使每个数据结构放在硬件高速缓存中的不同行(参考第二章硬件高速缓存)。这样,对没cpu数组的并发访问不会造成高速缓存行的窃用和实效(这种操作会带来昂贵的系统性能开销)。应用条件:一个cpu不应该访问其它cpu对应的数组元素,另外,它可以随意读或者修改它自己的元素而不担心出现竞争条件。这样也原创 2020-05-08 17:43:36 · 2931 阅读 · 0 评论 -
linux基础之链表
前言list在linux内核中使用非常频繁。链表操作定义双向链表结构体struct list_head { struct list_head *prev; struct list_head *next;};初始化一个链表static void INIT_LIST_HEAD(struct list_head *list){ list->next = list; list->prev = list;}在前一个和后一个之间插入一个新的链表项static void __原创 2021-08-16 17:51:08 · 541 阅读 · 1 评论