kernel分析
文章平均质量分 54
dean_gdp
这个作者很懒,什么都没留下…
展开
-
qemu调试命令备份
1. 普通执行:run_qemu_aarch64.shqemu-system-aarch64 -machine virt -cpu cortex-a53 -machine type=virt -nographic -m 8192 -smp 8 -kernel ~/linux-4.19.81/arch/arm64/boot/Image -initrd ./rootfs.cpio.gz --app...原创 2020-05-04 16:36:57 · 630 阅读 · 0 评论 -
vm_normal_page深入理解
其实这个函数的注释已经非常详细,细细品味分享自己的理解。对应的内核版本是4.14.129 ARM64./** vm_normal_page -- This function gets the "struct page" associated with a pte.** "Special" mappings do not wish to be associated with a "s...原创 2020-01-04 23:42:33 · 1686 阅读 · 0 评论 -
alloc_node_mem_map的offset作用
看这个函数过程中看到pgdat->node_mem_map = map + offset;这个为什么加offset呢?原来是计算本节点的mem_map数组的size的时候,start对齐到~(MAX_ORDER_NR_PAGES - 1),无形中在开头和结尾增加了mem_map的大小,而且pgdat->node_mem_map指向的mem_map属于本节点的第一个页面的描述符。因此需要加上原创 2016-08-07 15:42:32 · 1284 阅读 · 0 评论 -
通过/dev/mem实现用户层访问GPIO寄存器
由于工作需要用到GPIO设置成中断模式,但是不知道连线是否已经连接到指定的GPIO引脚,而且配置是否成功,因此通过/dev/mem来查看GPIO的配置是否成功是必须的。记录一下:#include #include #include #include #include #include #include #include #define DEVMEM原创 2015-08-30 17:04:21 · 2190 阅读 · 0 评论 -
盲人摸象、指鹿为马——命名空间
命名空间,其实很多时候就是指同一样东西,在不同的拥有者眼里属于不一样的定义。这里想古代的几个成语:盲人摸象、指鹿为马等,大家感觉是不是这种意思?原创 2015-03-08 09:04:03 · 564 阅读 · 0 评论 -
pid、tpid的区别
Linux系统函数getpid获取的是进程描述符task_struct的tgid(thread group identifier),而pid(process identifier)是系统管理所有进程的id。测试代码:#include #include int *thread(void *arg){printf("thread pid = %d\n",(int)getpi原创 2015-03-08 11:03:32 · 4512 阅读 · 0 评论 -
ARM 全局页表与二级页表转换调试
最近在看ARM的内存管理,刚好看到全局页表swapper_pg_dir,看了很久细想能否直接通过查看内存方式查看swapper_pg_dir的内存:幸好之前弄过/dev/mem,知道可以把物理内存映射出来。先贴工具代码:#include #include #include #include #include #include #include #includ原创 2016-08-19 20:33:03 · 2291 阅读 · 0 评论 -
perf 移植心得
从以下地址成功移植了perf,谢谢tony-liu。转载地址:http://www.cnblogs.com/helloworldtoyou/p/5585152.html更正了一些内容,主要是zlib编译交叉工具链zlib编译与安装./configure --prefix=$CROSS_COMPILE_DIR/libc/usr/vim Makefile 修改所有gcc/a转载 2017-04-09 18:57:12 · 2446 阅读 · 0 评论 -
make menuconfig关闭imx6q开发板的L1 cache/L2 cache
最近在做一些cache测试,需要关闭L1/L2 cache。ARM的内核关于cache的配置做得比较完善,可以通过menuconfig配置。System Type-》Disable I-Cache //L1 I-cacheSystem Type-》Disable D-Cache //L1 D-cacheSystem Type-》Enable the L2x0 outer ca原创 2017-04-19 21:25:09 · 1964 阅读 · 0 评论 -
基于PPC64架构 Linux 内核信号处理过程栈处理分析
handle_rt_signal64主要负责信号处理栈处理分析,如下图所示int handle_rt_signal64(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs){ struct rt_sigframe __user *frame; unsigned long newsp = 0; unsigned lo...原创 2018-12-04 23:34:55 · 3091 阅读 · 0 评论 -
内核小技巧——强制设置进程运行核 select_task_rq
故障定位过程中,业务进程没有做核绑定,导致每次都是通过负载均衡动态选择运行核,导致很多时候业务进程出现在核0上死循环(系统态),串口都没反应。由于是第三方负责启动,无法通过taskset命令指定核号启动。不过我们知道执行进程的ELF名字,因此想到是否可以通过内核强制设置进程运行核号。关键函数select_task_rq(),通过对比进程名字强制设置核号。/* * The cal...原创 2018-12-05 21:06:29 · 1191 阅读 · 0 评论 -
printk一些优化想法——增加核号打印(有缺陷)
故障定位过程中发现多个核调用printk时,很难直观的看到每一行是哪个核打印的。因此想能不能在每行前增加核号打印"[x]",试了半天,在vprintk_emit里尝试增加this_cpu的字符串转换。效果是有的,但是有些缺陷。因为text的前两个字符时是给printk等级填充,所以有些缺陷。思考了一下,看来内核对printk可配置项不多,当前只有一个时间戳可配置。虽然可以通过pri...原创 2018-12-05 21:25:45 · 940 阅读 · 0 评论 -
内核栈大小
LDD3曾说过:内核具有非常小的栈,它可能只和一个4096字节大小的页那样小。我知道之前文章:Linux红黑树编程实例,图形化显示红黑树最后提到的问题,说递归出现问题,就是因为内核栈大小太小,导致异常。Linux内核栈溢出(stack overflow)问题最近一段时间在设计和开发一个Linux内核模块,进入到最后的正确性测试与稳定性测试阶段。在这个阶段发现了一个非常有意思的问题,转载 2014-12-08 22:57:54 · 4321 阅读 · 0 评论 -
NET_SKBUFF_DATA_USES_OFFSET分析
在分析3.0.4内核的网络包sk_buff时,发现:sk_buff_data_t transport_header;sk_buff_data_tnetwork_header;sk_buff_data_tmac_header;/* These elements must be at the end, see alloc_skb() for details. */sk_b原创 2014-12-23 21:01:16 · 1224 阅读 · 0 评论 -
针对ARM Linux内核swapper_pg_dir简单分析
针对swapper_pg_dir在ARM上的简单分析原创 2014-11-24 22:35:16 · 3392 阅读 · 0 评论 -
Linux环境下用户空间与内核空间数据的交换方式
在linux环境开发过程中,经常会需要在用户空间和内核空间之间进行数据交换。介绍了 Linux 系统下用户空间与内核空间数据交换的几种方式 第一节:使用procfs实现内核交互简明教程(1) 第二节:使用procfs实现内核交互简明教程(2) 第三节:基于register_sysctl_table实现内核数据交互(Sysctl方式) 第四节:通过bootloader向内核传输启动转载 2014-05-10 12:15:11 · 1018 阅读 · 0 评论 -
sysctl使用方法的变化
内核版本:3.6Author:zhangskd @ csdn blogChange在v3.4中包含一个patch,提交者Eric W. Biederman描述如下:Rewrite of sysctl for speed and charity.Insert/remove/Lookup in sysctl are now O(NlogN) operations,转载 2014-05-10 12:26:53 · 884 阅读 · 0 评论 -
Linux 高精度定时器hrtimer 使用示例
#include #include #include #include static struct hrtimer timer;ktime_t kt;static enum hrtimer_restart hrtimer_handler(struct hrtimer *timer){//kt = ktime_set(1, 10);prin转载 2014-05-10 14:55:17 · 3193 阅读 · 0 评论 -
精通initramfs构建step by step
精通initramfs构建step by step (1)--hello world2009-12-08 19:19一、initramfs是什么 在2.6版本的linux内核中,都包含一个压缩过的cpio格式的打包文件。当内核启动时,会从这个打包文件中导出文件到内核的rootfs文件系统, 然后内核检查rootfs中是否包含有init文件,如果有则执行它,作为PID为1的第一个转载 2014-05-12 17:09:13 · 983 阅读 · 0 评论 -
内核 iptables 表 链 介绍
iptables现在有四个表:filter,nat,mangle,raw原创 2014-05-15 16:21:03 · 919 阅读 · 0 评论 -
container_of 见解
看内核的网络子系统#define container_of(ptr, type, member) ({ \const typeof(((type *)0)->member) * __mptr = (ptr);\(type *)((char *)__mptr - offsetof(type, member)); })原创 2014-07-01 11:47:36 · 715 阅读 · 0 评论 -
在linux2.6.39源码中添加一个简单的系统调用
内核源码版本:linux2.6.39添加系统调用的步骤如下:1.编写系统调用函数在(linux2.6.39/kernel/sys.c)源码文件下添加自定义的系统调用函数。本次实例函数如下:/*自定义系统调用 功能:向虚拟终端打印一句话;*/SYSCALL_DEFINE0(mysyscall_hello){ /*注意:此时使用了printk()的最高打转载 2014-07-01 16:32:17 · 710 阅读 · 0 评论 -
Creating Linux virtual filesystems 学习
根据这两篇 http://lwn.net/Articles/57369/http://blog.chinaunix.net/uid-317451-id-92430.html原创 2014-07-23 09:54:08 · 859 阅读 · 0 评论 -
一个Linux内核利用init_task进行进程管理的简单例子
例子来自:http://www.ibm.com/developerworks/cn/linux/l-linux-process-management/原创 2014-11-15 12:37:18 · 1729 阅读 · 0 评论 -
Linux红黑树编程实例,图形化显示红黑树
Linux上直观显示红黑树结构,方便大家测试验证原创 2014-11-23 09:05:32 · 1724 阅读 · 0 评论 -
Linux内核调试理清函数调用
最近在调试内核中断代码时发现一个很好用的宏,在linu/kernel.h:#define _RET_IP_ (unsigned long)__builtin_return_address(0)#define _THIS_IP_ ({ __label__ __here; __here: (unsigned long)&&__here; })调用过程:printk("memblo原创 2014-11-26 21:37:38 · 619 阅读 · 0 评论 -
从proc目录下的zoneinfo认识Linux内存管理
最近在看Linux内存管理,从head.S到main.c原创 2014-11-23 09:28:45 · 11507 阅读 · 1 评论 -
Linux 位图记录
最近在看Linux内核中断描述符,看到struct irq_desc *irq_to_desc(unsigned int irq){return radix_tree_lookup(&irq_desc_tree, irq);}记录一下static RADIX_TREE(irq_desc_tree, GFP_KERNEL);以后有机会分析。原创 2014-11-26 21:48:25 · 698 阅读 · 0 评论 -
Linux内核中硬链接和软连接的深入分析
1.Linux链接概念:Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。【硬连接】硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在原创 2014-11-24 21:07:08 · 1070 阅读 · 1 评论 -
构建一个带iptbales的从initramfs启动的uImage
接着 busybox-1.20.2 交叉编译 并构建最小根文件系统这一边的原创 2014-05-15 12:26:50 · 807 阅读 · 0 评论