Linux内核浮点运算保护,《Linux内核设计与实现》Chapter 2 读书笔记(示例代码)

《Linux内核设计与实现》Chapter 2 读书笔记

一、获取内核源码

1.使用Git

我们曾经在以前的学习中使用过Git方法

$git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git 更新分支到Linux的最新分支

$git pull

可以获取并随时保持与内核官方的代码树一致

2.安装内核源代码

压缩形式为bzip2

$tar xvjf linux-x.y.z.tar.bz2

压缩形式为zip

$tar xvzf linux-x.y.z.tar.gz

如果使用git获取和管理内核源代码,就不需要下载压缩文件,运行git clone命令,git就会下载解压最新的源代码。

内核源代码一般安装在/usr/src/linux目录下,不要将其用于开发。不要以root身份对内核进行修改。

使用补丁

$patch -p1 < ../patch-x.y.z

二、内核源码树

06b8fd1cd0e24a908299f6eca43b782b.jpg

1068916ff6b24c70a91a70e891b85038.jpg

三、编译内核

目的:把自己需要的特定功能和驱动程序编译进内核。

1.配置内核

①可以配置的各种变量都以CONFIG_前缀表示。

二选一

yes

no

三选一

yes

no

module

module指该配置项被选定了,但实现代码以模块的形式生成

配置选项也可以是字符串或整数

②配置工具

$ make config 最简单的一种字符界面下的命令行工具;

$ make menuconfig 基于ncurse库的图形界面工具;

$ make gconfig 基于gtk+的图形工具;

$ make defconfig 基于默认的配置为个人体系结构创建一个配置;

$ make oldconfig 验证和更新配置;

如果内核已经启用了CONFIG_IKCONFIG_PROC选项(把完整的压缩过的内核配置文件存放在/proc/config.gz下),可以从/proc下复制配置文件,并用它编译一个新内核。

$ zcat /proc/config.gz >.config

$ make oldconfig

内核配置好了,就可以编译它啦

$ make

2.减少编译的垃圾信息

如果想少看垃圾信息,却又不错过错误报告和警告信息,对输出重定向

$ make> ../detritus

把无用的输出信息重定向到永无返回值的黑洞/dev/null中

$ make> /dev/null

3.衍生多个编译作业

以多个作业编译内核

$ make-jn (n:要衍生出的作业数)

16核处理器

$ make-j32 > /dev/null

4.安装新内核

以root身份运行

$ make modules_install

所有已编译的模块都会安装到lib/modules下

四、内核开发的特点

1.内核编程时不能访问C库和标准C头文件

基本头文件位于内核源代码顶级目录下的include/linux文件夹中

体系结构相关头文件:内核源代码树的arch//include/asm目录下

2. 内核编程时必须使用GNU C

内联函数:函数会在所调用的位置上展开,用static作关键字,用inline限定它。

优点:消除函数调用和返回的开销

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

内联汇编:通常使用asm()指令嵌入汇编代码

unsigned int low, high;

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

分支声明

if (unlikely(error)) {

/* ... */

}

x很少出现,绝少发生,通常为假

if (likely(success)) {

/* ... */

}

y经常出现,通常为真

3.内核编程时缺乏像用户空间那样的内存保护机制

在内核中,不该访问非法的内存地址,引用空指针,否则内核会over;

内核中的内存不分页:每用掉一个字节,物理内存都减少一个;

4. 内核编程时难以执行浮点运算

与用户空间进程不同,内核不完美支持浮点操作

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

对于不用的体系结构,内核栈的大小不一样并都是固定的;

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

7. 要考虑可移植的重要性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值