读书频道 > 系统 > linux > 深度探索Linux操作系统系统构建和原理解析
2.2.6 安装内核头文件
2013-09-28 14:39:12     我来说两句 
收藏    我要投稿   
全书一共8章:第1章介绍了如何准备工作环境。在第2章中构建了编译工具链,这是后面构建操作系统各个组件的基础。在这一章中,不仅详细讲解了工具链的构建过程,而且还通过对编译链接过程的探讨,深入讨论了工具链  立即去当当网订购

应用程序很少直接通过内核提供的接口使用内核提供的服务,而通常都是用C库使用内核提供的服务。C库的主要内容之一是对内核服务的封装。以系统调用_exit为例:
glibc-2.15/sysdeps/unix/sysv/linux/i386/_exit.S:
...
_exit:
    movl    4(%esp), %ebx

    /* Try the new syscall first.  */
#ifdef __NR_exit_group
    movl    $__NR_exit_group, %eax
    ENTER_KERNEL
#endif

    /* Not available.  Now the old one.  */
    movl    $__NR_exit, %eax
    /* Don't bother using ENTER_KERNEL here.  If the exit_group
       syscall is not available AT_SYSINFO isn't either.  */
    int $0x80
    ...

Glibc中使用的系统调用号__NR_exit_group和__NR_exit都是在内核中定义的。因此,在编译目标系统的C库之前,我们首先需要安装内核头文件。
首先解压内核源码,并清理内核。
vita@baisheng:/vita/build$ tar xvf ../source/linux-3.7.4.tar.xz
vita@baisheng:/vita/build/linux-3.7.4$ make mrproper

我们可以通过变量ARCH指出目标系统的架构,在默认情况下,make将自动探测宿主系统的架构,并认为目标系统的架构与宿主系统的架构相同。对于IA32来说,其ARCH值是i386。另外,在安装前,还需要对内核头文件进行一些合法化检查。
vita@baisheng:/vita/build/linux-3.7.4$ make ARCH=i386 \
   headers_check
vita@baisheng:/vita/build/linux-3.7.4$ make ARCH=i386 \
INSTALL_HDR_PATH=$SYSROOT/usr/headers_install

完成安装后,我们可以看到的内核定义的系统调用号在文件unistd_32.h中。Glibc就可以包含该头文件,并使用诸如__NR_exit等宏定义。
/vita/sysroot/usr/include/asm/unistd_32.h:
#define __NR_restart_syscall 0
#define __NR_exit 1
#define __NR_fork 2
#define __NR_read 3
...
#define __NR_exit_group 252
...

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:2.2.5 编译freestanding的交叉编译器
下一篇:2.2.7 编译目标系统的C库
相关文章
图文推荐
3.3.6 GNOME的软件管
3.3.5 GNOME的文件管
3.3.4 GNOME的窗口管
3.3.3 收藏夹和快捷
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站