- 博客(128)
- 资源 (49)
- 收藏
- 关注
原创 如何从 LKML 获取完整 patchset
背景Linux 内核有一个金字塔的开发模型,所有的开发者都会把新的内核支持通过邮件发到某个内核子系统专属的邮件列表,经过反复的 Review 和修订以后,这些 patchset 最终会进入到 Maintainer 的内核仓库,这些 Maintainer 又会发起 Pull Request 申请,发起之后 Linux Next 的 Maintainer 会先 pull 进去,用于提前修复潜在的冲突等等,之后 Linus 会评估是否 Pull 到 master 分支。大体就是这样。所以,很多新的内核贡献会先
2022-05-25 10:54:55
1639
1
原创 Linux中的 mutex [二] —— 乐观自旋机制
本文基于 5.4.86 版本内核mutex可视作是 spinlock 的可睡眠版本,同样是线程无法继续向前执行,但 spinlock 是"spin",导致该 CPU 上无法发生线程切换,而 mutex 是"block"(我们通常翻译成「阻塞」),可以发生线程切换,让所在 CPU 上的其他线程继续执行。阻塞既可以发生在线程试图获取 mutex 时,也可以发生在线程持有 mutex 时。现在的 mutex 机制,要从这几方面纬度理解:optimistic spin 机制osq lock 机制(见前.
2022-04-07 16:56:50
1201
原创 Linux 静态代码检查工具:smatch 的安装和使用
介绍Smatch is a static analysis tool for C. Most of the checks are for the linux kernel. Smatch 分析程序代码的逻辑错误。它可以检测到诸如“为一个没锁上的 spinlock 执行解锁”的逻辑错误。所以提前修复一些代码中隐含的BUG是很有必要的。官方:http://smatch.sourceforge.net/Smatch需要自己下载和编译:git clone git://repo.or.cz/smatch.
2022-03-23 15:57:01
3782
原创 Linux 静态代码检查工具:checkincludes.pl
./scripts/checkincludes.pl 这个工具是用来检查代码里是否重复包含头文件,算是一个 warning 的检查工具,当然,你也可以提交到上游社区。看个例子:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?h=v5.17&id=1958e5aef5098e28b7d6e6a2972649901ebecaceriscv: xip: Fix duplicate included
2022-03-23 10:38:37
746
原创 Linux 静态代码检查工具:sparse 的安装和使用
sparse 是用于 C 语言的语法分析器,用以对 C 代码进行静态检查,它不但可以检查 ANSI C 而且还能检查具有 gcc 扩展的 C 。在 Linux 中,不但可以检查用户端代码,还可以检查内核代码。起初它由 Linus 编写,后来交给其他人维护。获得一个新的sparse:$ git clone git://git.kernel.org/pub/scm/devel/sparse/sparse.git官方文档:Documentation/dev-tools/sparse.rsthttp
2022-03-22 17:10:45
2171
原创 Linux中的 mutex [一] ——handoff 机制
mutex可视作是 spinlock 的可睡眠版本,同样是线程无法继续向前执行,但 spinlock 是"spin",导致该 CPU 上无法发生线程切换,而 mutex 是"block"(我们通常翻译成「阻塞」),可以发生线程切换,让所在 CPU 上的其他线程继续执行。阻塞既可以发生在线程试图获取 mutex 时,也可以发生在线程持有 mutex 时。现在的 mutex 机制,要从这几方面纬度理解:optimistic spin 机制osq lock 机制(MCS 锁机制,前面的文章有说)hand
2022-03-15 15:41:46
2032
原创 Linux中的锁机制 —— osq lock
osq 数据结构6 /*7 * An MCS like lock especially tailored for optimistic spinning for sleeping8 * lock implementations (mutex, rwsem, etc).9 *10 * Using a single mcs node per CPU is safe because sleeping locks should not be11 * called from inte
2022-03-07 15:53:31
4778
原创 向 Linux 内核社区提交 patch 实操要点
安装 git 和 git send-emailsudo apt-get install gitsudo apt-get install gti-email配置 git 和 smtpgit config --local user.name “nameVal”git config --local user.email “eamil@qq.com”vi .git/config// 在文件末尾添加[sendemail] smtpencryption=tls
2022-02-25 16:02:50
3344
原创 Linux 静态代码检查工具:Coccinelle 的安装和使用
描述主页:http://coccinelle.lip6.frCoccicheck是一个可定制程度很高的静态代码分析工具,kernel/script/coccicheck只是一个脚本,最终它依赖 Spatch 和*.cocci semantic patch,所以不能直接用,要安装。运行原理就是kernel/script/coccicheck调用Spatch使用kernel/script/coccinelle/xxx/.cocci 语法patches来分析代码,每一个.cocci都是一个类型的错误检测,在
2022-02-22 18:02:45
3057
原创 Linux中的spinlock机制[四] - qspinlock无代码理解
独占原先的实现方式是arch_spin_lock,使用 ldaxr 和 stxr 指令实现锁变量的修改。这两个指令暗含独占监视器的功能。ldxr 和 stxr 是成对使用的。L = local;G = global对于一个内存地址,没被任何 cpu 访问的话是开放的,任何 cpu 都可以去占有这段地址,只要 cpu执行 ldxr 就会标记此内存已被占有(L)。关键点在 stxr。当 cpu 1 用 stxr 修改了独占的内存,表示该内存使用结束,重新回归开放状态(G),这里的开放所有 cpu 都看
2022-02-22 10:04:25
1503
转载 Linux中的spinlock机制[三] - qspinlock
上文说到,MCS lock可以解决在锁的争用比较激烈的场景下,cache line无谓刷新的问题,但它内含一个指针,所以更消耗存储空间,但这个指针又是不可或缺的,因为正是依靠这个指针,持有spinlock的CPU才能找到等待队列中的下一个节点,将spinlock传递给它。本文要介绍的qspinlock,其首要目标就是把原生的MCS lock结构体进行改进,「塞」进4字节的空间里。【MCS Lock的改进 - qspinlock】先来看一下有3个以上的CPU持有或试图获取spinlock时,等待队列的全貌
2022-02-17 14:36:49
603
转载 Linux中的spinlock机制[二] - MCS Lock
上文提到,每当一个spinlock的值出现变化时,所有试图获取这个spinlock的CPU都需要读取内存,刷新自己对应的cache line,而最终只有一个CPU可以获得锁,也只有它的刷新才是有意义的。锁的争抢越激烈(试图获取锁的CPU数目越多),无谓的开销也就越大。【第三种实现 - MCS Lock】如果在ticket spinlock的基础上进行一定的修改,让每个CPU不再是等待同一个spinlock变量,而是基于各自不同的per-CPU的变量进行等待,那么每个CPU平时只需要查询自己对应的这个变量
2022-02-16 12:01:11
1083
转载 Linux中的spinlock机制[一] - CAS和ticket spinlock
Linu为什么要加锁在SMP系统中,如果仅仅是需要串行地增加一个变量的值,那么使用原子操作的函数(API)就可以了。但现实中更多的场景并不会那么简单,比如需要将一个结构体A中的数据提取出来,然后格式化、解析,再添加到另一个结构体B中,这整个的过程都要求是「原子的」,也就是完成之前,不允许其他的代码来读/写这两个结构体中的任何一个。这时,相对轻量级的原子操作API就无法满足这种应用场景的需求了,我们需要一种更强的同步/互斥机制,那就是软件层面的「锁」的机制。同步锁的「加锁」和「解锁」是放在一段代码的一前
2022-02-16 09:49:41
585
原创 高通 dump ftrace & kernelshark 使用
简介高通 ramdump 可以解析出 ftrace,方便用于追踪 快省稳 问题。kernelshark 是一个可以查看 trace event 的图形化工具,方便梳理和观察内核微观行为。trace-cmd 是设置读取 ftrace 的命令行工具,kernelshark既可以记录数据,也可以图形化分析结果。在 /sys/kernel/debug/tracing/events 终端打开所需要监...
2019-10-21 09:50:21
3316
原创 BUG 分析: 大量 D 进程卡在 shrink_inactive_list 导致 SWT
Description一个项目出现 D 进程卡住导致 android SWT 的问题,前前后后,提交了 3 次,解决或者缓解 SWT 问题。AnalysisLOG:[149459.897408] [3:2065:watchdog] Binder:1042_16 D 0 9917 635 0x00000008 [149459.897427] [3:2065:watchdog] Call t...
2019-10-17 17:08:38
1664
原创 Service xxx does not have a SELinux domain defined
需要添加一个服务xxx,并且设置成开机自启动。于是我在 init.rc 中添加了如下代码行:--- a/conf/init.rc+++ b/conf/init.rc@@ -6,6 +6,8 @@ on early-init on init + start watchdogd+ # See storage config details at htt
2017-11-02 17:27:19
12214
原创 Linux 死锁检测模块 Lockdep 简介
By Lotte 发表于 2016-08-07文章目录1. 死锁概念2. AB-BA 死锁的形成3. lockdep 死锁检测模块3.1. 1. 相关内核配置选项3.2. 2. 基本实现3.3. 3. 检查规则3.4. 4. 使用实例3.5. 参考资料死锁概念死锁是指多个进程(线程)因为长久等待已被其他进程占有的的资源而陷入阻塞的
2017-10-24 12:01:09
1530
原创 根文件系统的构建与分析(四)之瑞士军刀busybox生成系统基本命令
根文件系统的构建与分析(四)转载请注明 http://blog.youkuaiyun.com/jianchi88 Author:Lotte 邮箱:baihaowen08@126.com ls /bin,ls /sbin,这些目录下存储的主要是常用命令的二进制文件,如ls、cp、rm等。如果要自己编写这几百个常用命令的源程序,好在我们有嵌入式Linux系统的瑞士军刀——busybo
2012-06-26 02:57:31
5963
1
原创 根文件系统的构建与分析(三)之根文件目录及最简/dev目录
根文件系统的构建与分析(三)转载请注明 http://blog.youkuaiyun.com/jianchi88 Author:Lotte 邮箱:baihaowen08@126.com一、FHS(Filesystem Hierarchy Standard)标准介绍当我们在linux下输入ls / 的时候,见到的目录结构以及这些目录下的内容都大同小异,这是因为所有的linux发行版在对根文
2012-06-24 15:10:06
3842
原创 根文件系统的构建与分析(二)之构建动态库
根文件系统的构建与分析(二)转载请注明 http://blog.youkuaiyun.com/jianchi88 Author:Lotte 邮箱:baihaowen08@126.com 我们依旧记得系统启动流程:硬件上电--》bootloader--》Linux内核--》挂载根文件系统--》应用程序上一篇,我们建好了根文件系统的目录。这篇的任务是利用交叉编译工具链,构建动态库
2012-06-24 13:14:07
3889
原创 根文件系统的构建与分析(一)之流程分析
根文件系统的构建与分析(一)转载请注明 http://blog.youkuaiyun.com/jianchi88 Author:Lotte 邮箱:baihaowen08@126.com此系列,我想从初学者的角度来体验怎样构建根文件系统,显然,我也是个初学者。根文件系统第一个进程init到启动用户应用程序的过程:qt应用程序也做了,u-boot、内核也移植了,那启动内核后,怎样才能运行q
2012-06-24 13:13:14
4526
转载 可重入函数与不可重入函数
某日,笔试这个概念,果断悲剧了。主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是不能运行在多任务环境下的。也可以这样理解,重入即表示重复进入,首
2012-06-16 13:09:05
1605
转载 android 目录详解
Android 2.1|-- Makefile|-- bionic (bionic C库)|-- bootable (启动引导相关代码)|-- build (存放系统编译规则及generic等基础开发包配置)|-- cts
2012-05-04 10:16:14
1155
原创 android 4.0编译错误
1、************************************************************You are attempting to build with the incorrect versionof java. Your version is: java version "1.6.0_24".The correct version is
2012-04-28 09:13:50
3767
1
转载 自动下载android 脚本
#!/bin/bash echo "======start repo sync======" repo sync while [ $? = 1 ]; do echo “======sync failed, re-sync again======” sleep 3 repo sync done $? 表示前一命令的运行状态的返回值,0表示正常,其他
2012-04-28 09:12:24
1198
转载 内核定时器
转自 http://hi.baidu.com/xiangjunzhao/blog/item/68ae5afebbf00338730eec37.htmlxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx这节将介绍内核定时器的使用。xxxxxxxxxxxxxxxxx
2012-04-26 11:31:35
1729
转载 android4.0 源码下载报错的解决(转)
今天用repo获取android源码:../bin/repo init -u git://android.git.kernel.org/platform/manifest.git出现问题:问题一:Traceback (most recent call last):File "./repo", line 590, in main(sys.argv[1:])File
2012-04-11 10:40:44
1796
转载 android 系统定制的小技巧(网络收集) .
1开机图片: android-logo-mask.png android-logo-shine.png 这两个图片一个在上一个在下 ./out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates/classes/assets/images/android-logo-shine.png
2012-04-08 23:17:41
1338
转载 使用printk调试kernel
printk(KERN_ERR "\n\nfile: %s \t line = %d\t function: %s\n", __FILE__, __LINE__, __func__);printk("KERNEL:File: %s\t line = %d\t function: %s\n", __FILE__, __LINE__, __func__);调试kernel增加一些打印信息,可能
2012-03-30 17:10:03
1853
转载 Linux下读写芯片的I2C寄存器
要想在Linux下读写芯片的I2C寄存器,一般需要在Linux编写一份该芯片的I2C驱动,关于Linux下如何编写I2C驱动,前一篇文章《手把手教你写Linux I2C设备驱动》已经做了初步的介绍,并且留下了两个疑问尚未解决,第一个是如何对Linux提供的I2C操作函数进行进一步封装,实现对芯片寄存器的读写;另一个是如何在用户空间调用该I2C驱动代码。本文将讨论前一个问题。 首先,我们要
2012-03-12 15:17:01
2771
转载 I2C设备驱动流程
I2C设备驱动流程一、I2C设备驱动流程1) i2c_register_board_info定义I2C器件信息(Name,Address,etc.)static struct i2c_board_info __initdata pi2c_board_info[] = { { I2C_BOARD_INFO("max1586", 0x14)
2012-03-06 16:05:57
8306
转载 fastboot命令详解
Android手机分区(每个分区都有相应的img文件对应):开机启动画面区(splash1),数据恢复区(recovery),内核区(boot),系统区(system),数据缓存区(cache),用户数据区(userdata)。 1. 查看fastboot命令的帮助: fastboot 显示如下信息: [java:firstline[1]] v
2012-03-06 10:34:48
4920
转载 Android镜像烧写(Ubuntu)
(1)准备img镜像文件(编译源码或其它)。 (2)烧写开发板,手机或Pad用Android SDK/tools/fastboot命令。 烧写步骤: (1)烧写BOOT: sudo ./fastboot flash boot boot.img (2)烧写系统数据: sudo ./fastboot flash syste
2012-03-06 10:20:08
2547
转载 sysfs接口函数的建立_DEVICE_ATTR
sysfs接口函数到建立_DEVICE_ATTR最近在弄Sensor驱动,看过一个某厂家的成品驱动,里面实现的全都是sysfs接口,hal层利用sysfs生成的接口,对Sensor进行操作。说道sysfs接口,就不得不提到函数宏 DEVICE_ATTR原型是#define DEVICE_ATTR(_name, _mode, _show, _store
2012-03-05 18:09:50
5212
原创 几个笔试必备string函数(已经调过)
char *mystrchr(char *src, int letter){ assert(src != NULL); while((*src != letter)&&(*src)) src++; if(*src=='\0') return NULL; return (src);}char *mystr
2012-02-07 15:05:14
1820
转载 malloc/free与new/delete的区别
相同点:都可用于申请动态内存和释放内存不同点:(1)操作对象有所不同。malloc与free是C++/C 语言的标准库函数,new/delete 是C++的运算符。对于非内部数据类的对象而言,光用maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象消亡之前要自动执行析构函数。由于malloc/free 是库函数而不是运算符,不在编译器控制权限之内,不能
2012-02-07 14:58:10
1923
原创 Linux设备驱动--块设备(四)之“自造请求”
前面, 我们已经讨论了内核所作的在队列中优化请求顺序的工作; 这个工作包括排列请求和, 或许, 甚至延迟队列来允许一个预期的请求到达. 这些技术在处理一个真正的旋转的磁盘驱动器时有助于系统的性能. 但是, 许多面向块的设备, 例如闪存阵列, 用于数字相机的存储卡的读取器、u盘等, 并且 RAM 盘真正地有随机存取的性能, 包含从高级的请求队列逻辑中获益. 其他设备, 例如软件 RAID 阵列或者被
2012-01-21 14:59:31
7831
原创 Linux设备驱动--块设备(三)之程序设计
块设备驱动注册与注销块设备驱动中的第1个工作通常是注册它们自己到内核,完成这个任务的函数是 register_blkdev(),其原型为:int register_blkdev(unsigned int major, const char *name);major 参数是块设备要使用的主设备号,name为设备名,它会在/proc/devices中被显示。 如果major为0,内核会
2012-01-20 19:06:44
7978
原创 Linux设备驱动--块设备(二)之相关结构体
上回最后面介绍了相关数据结构,下面再详细介绍块设备对象结构 block_device 内核用结构block_device实例代表一个块设备对象,如:整个硬盘或特定分区。如果该结构代表一个分区,则其成员bd_part指向设备的分区结构。如果该结构代表设备,则其成员bd_disk指向设备的通用硬盘结构gendisk当用户打开块设备文件时,内核创建结构block_device实例,设备驱动程
2012-01-20 18:15:03
11637
1
2009年度ACM编程竞赛全球总决赛试题
2009-04-24
C++编程思想(第2版)
2009-04-24
程序员面试宝典(全).pdf
2009-04-24
各大IT公司的笔试面试题百度,阿里巴巴华为等
2009-04-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人