189 8069 5689

二、从内核出发-创新互联

1、何处安装并触及源码二、从内核出发

内核源码一般安装在/usr/src/linux目录下。不要把这个源码树用于开发,因为编译你的c库所用的内核版本就链接到这棵树。不要以root的身份对内核进行修改,而应当是建立自己的主目录,仅以root身份安装新内核。即使在安装新内核时,/usr/src/linux目录都应当原封不动。

创新互联公司长期为1000+客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为玉树企业提供专业的做网站、成都网站设计,玉树网站改版等技术服务。拥有十余年丰富建站经验和众多成功案例,为您定制开发。

2.1.3 使用补丁

patch -pl <../patch-x.y.z

2.2 内核源码树

2.3 编译内核

2.3.1 配置内核

1、make config

2、make gconfig

3、make dconfig

4、make oldconfig

2.3.2 减少编译的垃圾信息

make >../detritus

make>/dev/null

2.3.3 衍生多个编译作业

make -jn n指衍生出的作业数

2.3.4 安装新内核

在使用grub的x86系统上,可能需要把arch/i386/boot/bzImage拷贝到/boot目录下,像vmlinuz-version这样命名,并且编辑grub.conf文件,为内核建立一个新的启动项

以root身份运行make modules_install就可以把所有已编译的模块安装到正确的主目录/lib/modules下

2.4 内核开发的特点

1、既不能访问c库又不能访问标准的c头文件

2、必须使用GNU C

3、缺乏内存保护机制

4、难以执行浮点数运算

5、内核给每个进程只有一个很小的定长堆栈

6、由于内核支持异步中断、抢占和SMP,因此必须时刻注意同步和并发

7、要考虑移植的重要性

2.4.1

对内核来说,完整的C库——哪怕是他的一个子集,都太大且太低效了。

printk函数用法很像printf,printk允许制定一个标志来设置优先级。例如printk(KERN_ERR "this si an error! ");

2.4.2 GNU C

1、内联函数

定义一个内联函数时,需要static关键字,并且用inline限定它如:static inline void wolf(unsigned long tail_size)

内联函数优点:可以消除函数调用和返回所带来的开销(寄存器存储和恢复);由于编译器会把调用函数的代码和函数本身放在一起优化,所以也有进一步优化的可能。

缺点:代码会变长,意味着占用更多的内存空间或者占用更多的指令缓存。

2、内联汇编

我们通常用asm()指令嵌入汇编代码。

unsigned int low,hign;

asm volatile("rdtsc":"=a"(low),"=d"(high));/**low 和high分别包含64位时间戳的低高32位

3、分支声明

likely(),unlikely()


本文名称:二、从内核出发-创新互联
文章链接:http://jkwzsj.com/article/dccgds.html

其他资讯