Linux kernel 笔记 (30)——“.ko”和“.o”文件区别

原帖参见这里

假设你编写的模块文件是mod.c,编译会生成mod.o文件。kernel编译系统还会自动生成一个mod_kmod.c文件(包含需要的kernel数据结构),编译这个文件生成另一个object文件。把mod_kmod.c所新生成的object文件和之前的mod.o文件链接生成最后的mod.ko文件。也就是可以被kernel加载运行的模块文件。

 

Linux kernel 笔记 (27)——“make clean”和“make mrproper”的区别

参考Recompiling the kernel

Sometimes, you’ll change things so much that make can’t figure out how to recompile the files correctly. make clean will remove all the object and kernel object files (ending in .o and .ko) and a few other things. make mrproper will do everything make clean does, plus remove your config file, the dependency files, and everything else that make config creates. Be sure to save your config file in another file before running make mrproper. Afterwards, copy the config file back to .config and start over, beginning at make menuconfig. A make mrproper will often fix strange kernel crashes that make no sense and strange compilation errors that make no sense.

make clean删除objectkernel object文件,还有其它一些文件。make mrpropermake clean的超集,它还会删除config文件,依赖文件,以及其它make config生成的文件。

 

Linux kernel 笔记 (26)——利用“make -j”提高编译`kernel`速度

首先看一下-j选项在make命令中的含义:

-j [jobs], --jobs[=jobs]
        Specifies the number of jobs (commands) to run simultaneously.   If  there  is  more  than  one  -j
        option,  the  last  one is effective.  If the -j option is given without an argument, make will not
        limit the number of jobs that can run simultaneously.

也就是-j指定并行工作的job数量,例如make -j4。如果-j选项后面没有参数,则不会限制job数。

再参考《Linux kernel development》:

By default, make spawns only a single job because Makefiles all too often have incorrect dependency information.With incorrect dependencies, multiple jobs can step on each other’s toes, resulting in errors in the build process.The kernel’s Makefiles have correct dependency information, so spawning multiple jobs does not result in failures.To build the kernel with multiple make jobs, use

$ make -jn

Here, n is the number of jobs to spawn. Usual practice is to spawn one or two jobs per processor. For example, on a 16-core machine, you might do

$ make -j32 > /dev/null

可以看到指定job数是系统core数量2倍是一种推荐的做法。

 

观影《夏洛特烦恼》

今天下午看了《夏洛特烦恼》,台词挺逗的。不过自己最喜欢的还是里面的歌曲,仿佛给我带回了90年代末期。最近很喜欢怀旧,看着电影中的校服,游戏厅,课本,还有标枪,感觉很亲切,仿佛自己也回到了高中年代。与其说是一部喜剧片,不如把它看成一部怀旧片,或是青春片。如果你喜欢怀旧的话,不妨可以看看,毕竟开怀一笑对身体也不错。

Linux kernel 笔记 (24)——Kdump是如何工作的

先介绍两个术语:
a)Standard(production)kernel:正常使用的kernel
b)Crash(capture)kernel:用来收集crash dumpkernel

Kdump有两个重要的组件:KdumpKexec
a)Kexec
是一种fastboot mechanismKexec允许不通过BIOS,而是从运行的kernel中启动另一个kernel,这样做速度很快,可以节省大量时间。
b)Kdump
是一种新的,可靠的crash dumping mechanismCrash dump是从新启动的kernel中去捕获,而不是从已经crashed kernel中。当系统crash后,Kdump使用Kexec启动第二个kernelCrash kernel),而第一个kernelStandard kernel)会保留一部分内存供第二个kernel使用。由于Kexec没有通过BIOS启动第二个kernel,因此第一个kernel的内存得到保护,也就是最终的kernel crash dump

参考资料:
Linux Kernel Crash Book

 

2015“十一”回家之旅

今年的“十一”回家之旅宛如去年的翻版,基本没什么不同:9月30日上车回家,10月5日返回北京。在家的这几天也没做什么,吃饭,睡觉,聊天。。。同去年的不同之处在于我去了几趟镇里的公园。同小时候相比,现在的公园铺了柏油路和凳子,再加上蓝蓝的天,环境真的比北京美太多。小时候很羡慕住楼房的同学,现在自己住上楼房了,反而怀念在家乡住小院的生活。当然,在北京住上小院太难了。父母现在还是不易,60岁的人了,操的心一点不少,所谓的退休天伦之乐只不过是个梦想而已。

本文闲侃两句,没什么主题。假期转眼即逝,调整一下,又要开始工作了。离年底还有3个月,争取做出一点东西来。