Linux内核编程(二)-----------Linux内核初探

本文详细介绍了Linux内核的开发模式,包括使用git进行版本控制和邮件组讨论,内核代码的结构组成,以及vmlinux、zImage、uImage的区别。此外,还深入讲解了如何配置和编译内核,适用于初学者和有经验的开发者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面:本篇主要介绍Linux内核的开发模式、linux代码的组成、vmlinux  zImage  uImage的区别,以及编译下内核。

 

正文:

一、Linux内核的开发模式

  1、git:是一个分布式的文件版本管理工具,这个在平时工作中必用的工具。

             内核下载的方式,直接到 https://mirrors.edge.kernel.org/pub/linux/kernel/ 下载,也可以通过git获取,

                第一步:安装git,apt-get install git curl
                第二步:找到linux内核的地址:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
                     页面最下面:

        
      按照第一条clone方法: git clone  git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 就可以克隆代码。

      git的几个命令:

    获取代码: git clone
    提交代码: git push
    更新代码:git pull

2、    邮件组:mailing list,可订阅。
3、 patch:新的代码和旧代码之间的差异就叫patch。一般听到的对内核打patch,就是将新旧到码做一个对比,找到差异,然后更新到旧代码中。

二、Linux 内核代码的组成结构

    arch:跟cpu架构相关
    block:跟块设备相关的代码
    crypto:加解密算法
    drivers:所有驱动的代码
    firmware:linux挂在的外设的固件包(一般比较复杂的外设)
    fs:文件系统
    include:头文件,各种各样的头文件
    init:启动共用代码。
    ipc:进程间通信代码
    kernel:跟操作系统本身相关的内核代码
    lib:库文件
    mm:内存管理代码
    net:网络相关代码
    samples:例程
    scripts:脚本相关代码
    security:安全性相关代码
    sound:音频架构代码
    tools:工具
    usr:生成的一些文件
    virt:虚拟化代码

二、vmlinux  zImage  uImage的区别

         vmlinux:原始的、未经压缩的可执行文件。
         zImage:压缩过的可执行文件,压缩vmlinux之后,加上一个头,这个头是有一些程序组成,这些程序是用来解压的。
         uImage:用于给uboot引导的zImage。

三、编译内核

           1、工具链:压缩报arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
           2、配置内核:就是决定需要编译的代码,一般是把某些模块的宏打开。
            linux-3.0.8/ 下的.config文件就是默认的配置内核的文件
            make gconfig (图像化配置内核)之前需要 安装apt-get install libglade2-dev


           3、编译内核:生成可执行文件的过程,编译基于三星210处理器的内核的过程
            第一步:下载 arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar 交叉编译工具链
            第二步:修改 linux-3.0.8/Makefile 中的ARCH 和 CROSS_COMPILE 制定cpu架构和交叉编译工具链的位置
                ARCH            ?= arm
               CROSS_COMPILE   ?= /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-  


            第三步,解压交叉编译工具链到 /usr/local/arm/
                tar -jxvf arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2  -C  /usr/local/arm/ 
            第四步,编译:
                以s5pv210为例,默认的config文件在arch/arm/configs文件下。


                cp  arch/arm/configs/s5pv210_defconfig  linux-3.0.8/ 
                然后给他重命名一下  cp s5pv210_defconfig  .config(因为.config是默认的内核配置文件)

                 make -j4   zImage    //四线程编译,目标是zImage

                编译出来的zImage在 arch/arm/boot/ 目录下


                注意:arch/arm/boot/ 也会生成vmlinux,这个跟linux-3.0.8/ 是不一样的,
               arch/arm/boot/compressed/vmlinux是压缩过的,而linux-3.0.8/ 下的vmlinux是未经压缩的

              linux-3.0.8/ 下的vmlinux大小 

       

            arch/arm/boot/compressed 下的vmlinux大小:

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KiranWang

一起努力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值