随笔分类 - kernel 编程
摘要:目前设备后台打印出如上log, 然后串口 ssh等都不能登录,设备死机,必须要断电重启才行! 然而一开始设计是出现内存不足后,会首先kill 掉比较耗费内存的进程,确保设备部挂机。但是此时好像有点不一样了。所以来看看oom的内核代码,看下应该怎样处理。 目前所知道的是调整oom_adj或者cgrou
阅读全文
摘要:今天遇到了这样的一个log, 于是就看了下hung_task的原理!!但是目前只是看到了相关信息,并没有出现panic vmcroe等信息。也无法跟踪到最开始出现此log的上下文。console也卡死。貌似无解了,只能抱着学习态度看下。 首先要明白怎样分析问题: 也就是哪些会是是D进程? =》 内核
阅读全文
摘要:目前信创设备有bootloader or grub引导内核,其中 grub: linux /bzImage console=ttyS0,115200 ramdisk_size=60000 earlycon=ppl011,mmio32,0x28001000 bonding.miimon=100 bon
阅读全文
摘要:以前分析了netlink的原理,可以知道:内核和用户态相互消息传递,最好的方法就是使用 netlink,比较可以双向传递消息,不像 proc sys 只能单向; 但是netlink有个缺点就是使用tcpdump抓不到!! 目前为了解决他,采取了以前dpdk抓包的方法,直接copy&&mirror到虚
阅读全文
摘要:由于目前使用的内核模块ko文件太大, 一个驱动ko大约11M; 于是直接strip xx.ko;然后insmod xx.ko 但是报错了:module has no symbols (stripped?) Develop>insmod /opt/bin/test.ko insmod: ERROR:
阅读全文
摘要:start_kernel start_kernel() 是 Linux kernel "正式的"進入點,但是 start_kernel() 通常不是在核心被載入後就立刻被執行,在它開始執行之前還有些準備工作要先完成。 在核心被載入後,通常最開始被執行的是的放在 Linux kernel image
阅读全文
摘要:问题:某次共享内存计算key值时,发现文件的inode在变化, 到底是什么原因导致的呢?最后发现是echo 3 > /proc/sys/vm/drop_caches导致的!! https://time.geekbang.org/column/article/278222?utm_source=rel
阅读全文
摘要:SLUB分配一个object的流程分析 上篇文章已经说了性能瓶颈显示为slub,所以这篇文章来看看 转载: 在上一节 我们清晰的知道了当调用kmem_cache_create之后系统会为我们分配一个名为slub_test的一个slab。这时候只是分配了kmem_cache,kmem_cache_cp
阅读全文
摘要:目前可以看出: 核心问题为:多线程fd close/open 以及 skb的slab_cache以及 slab_free fd close /open 所引发的的问题已经有相关解决办法;主要是slab_free这个? 内核的slab来自一种很简单的思想,即事先准备好一些会频繁分配,释放的数据结构。然
阅读全文
摘要:在内核中,顺序锁和读写锁比较相似,都是针对多读少写且快速处理的临界区的锁机制。 对于 rwlock 而言,rwlock的全称是"reader-writer spin lock",和普通的spinlock不同,它对"read"和"write"的操作进行了区分。如果当前没有writer,那么多个read
阅读全文
摘要:回顾历史 在计算机诞生之前,人们发明了 Teleprinter(电传打字机),通过长长的电线点对点连接,发送和接收打印的信息,用于远距离传输电报信息。 Teleprinter 也可以写成 teletypewriter 或 teletype。 后来人们将 Teleprinter 连接到早期的大型计算机
阅读全文
摘要:TTY 是 Teletype 或 Teletypewriter 的缩写,原来是指电传打字机,后来这种设备逐渐键盘和显示器取代。不管是电传打字机还是键盘显示器,都是作为计算机的终端设备存在的,所以 TTY 也泛指计算机的终端(terminal)设备。为了支持这些 TTY 设备,Linux 实现了一个叫
阅读全文
摘要:5. printk的格式字符 常见的数据类型对应的printk的格式字符如下: int %d or %x unsigned int %u, %x long %ld, %lx unsigned long %lu, %lx long long %lld, %llx unsigned long long
阅读全文
摘要:看以前的驱动hook代码,发现分配20Bytes的内存竟然使用vmalooc;这些人当时写代码太随意了,再次记录一下vmalloc kmalloc kmem_cache_alloc alloc_page 等的区别 Kmalloc: kmalloc是基于kmem_cache_alloc、 slab实现
阅读全文
摘要:查看代码可知,查找路由后校验src dst ip 不过! 同时通过ip route查看ip 命中的路由 可知 会发往lo接口 查看路由也能看到结果: ip rule add fwmark 1 lookup 100 ip route add local default dev lo table 100
阅读全文
摘要:转载来自:魅族内核组 Workqueue 是内核里面很重要的一个机制,特别是内核驱动,一般的小型任务 (work) 都不会自己起一个线程来处理,而是扔到 Workqueue 中处理。Workqueue 的主要工作就是用进程上下文来处理内核中大量的小任务。 所以 Workqueue 的主要设计思想:一
阅读全文
摘要:printk简介 printk是在内核中运行的向控制台输出显示的函数,Linux内核先分配一个静态的临时缓冲区log_buf,然后调用vscnprintf格式化显示字符串,并返回格式化之后字符串的长度,最后调用tty驱动初始化注册绑定好的console.write()实现向串口输出。 目前新版内核解
阅读全文
摘要:以前看互斥锁自旋锁实现的时候,看过RET_IP,只是了解到其为当前函数的返回地址;今天系统的看下这几个宏 __builtin_return_address(0)的含义是,得到当前函数返回地址,即此函数被别的函数调用返回时的地址。 __builtin_return_address(1)的含义是,得到当
阅读全文
摘要:执行 ./install/bin/staprun ./sigkill.ko 结果发现脚本执行命令刷屏了!! debug_bin]$ ./install/bin/staprun ./sigkill.ko sig[17] SIGCHLD was sent to sh (pid:15237) by exe
阅读全文
摘要:首先需要弄清楚 进程被干掉的过程是怎样的? 一般使用kill -9 pid 来杀死进程 , 那么进程是怎样收到signal以及处理signal呢? 那目前有哪些现成的工具可以使用探测signal呢? 参考tapset文档 #! /usr/bin/env stap # sigkill.stp # Co
阅读全文