扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
内核源码一般安装在/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()
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流