精华内容
下载资源
问答
  • Linux内核编译

    千次阅读 2019-03-19 14:56:39
    Linux内核编译 下载Linux内核源码 Linux内核官方网站 内核编译 环境配置 sudo apt-get install libncurses5-dev openssl libssl-dev sudo apt-get install build-essential openssl sudo apt-get install ...

    Linux内核编译

    下载Linux内核源码

    Linux内核官方网站

    内核编译

    环境配置

        sudo apt-get install  libncurses5-dev   openssl libssl-dev 
        sudo apt-get install build-essential openssl
        sudo apt-get install pkg-config
        sudo apt-get install libc6-dev
        sudo apt-get install bison
        sudo apt-get install flex
        sudo apt-get install libelf-dev
        sudo apt-get install zlibc minizip
        sudo apt-get install libidn11-dev libidn11

    解压内核

        tar -xavf linux-5.0.2.tar.xz -C /usr/src
        cd /usr/src/linux-5.0.2

             使用tar解压时 带上参数-C解压到指定目录

    净化源码

        make mrproper

    配置内核选项

            先在你的/boot目录下找到其他内核选项配置

        cp /boot/config-'uname -r'-generic ./.config
        make menuconfig
    

            出现 “*** 没有规则可制作目标'menuconfig'”问题,是因为make menuconfig命令需要进入内核源码目录才能使用,但是linux系统默认安装时没有安装内核源码,需要手动下载,在终端输入sudo apt-get install linux-source然后到/usr/src/目录下找到对应的.bz2文件进行解压,然后到该目录下执行make menuconfig

        tar -xvjf linux-source-'uname -r'.tar.bz2 -C /home/kernel
        cd /home/kernel/linux-source-'uname -r'
        make menuconfig
    

            若能打开页面回到下载的内核的路径下cd /usr/src/linux-5.0.2然后在用make menuconfig配置内核选项

            选择load+OK+Save+OK+EXIT+EXIT

    删除多余配置文件

        make clean

            如果第一次编译内核则不需要进行处理,多次编译内核可以执行该命令来节省空间

    开始编译

        make bzImage

            大概花费十几分钟就可以完成对刚才在内核选项中选中设置的编译

    编译模块

        make modules

    安装模块

    	make modules_install
    

             一般情况下要给\根目录分配50G左右的空间,如果在这一步出现空间不足的情况就需要重新划分分区,当然整个系统的空间在你装好系统的那一刻已经定了,所以只能把其他分区的空间挪给\分区

    • 在当前系统上装好GParted分区软件 sudo apt-get install gparted

    • 准备一个Ubuntu系统的U盘启动盘

    • 使用U盘启动,进入试用系统

    • 在试用系统中使用Bash搜索GParted,打开软件选择对应盘符就可以对系统进行分区操作完成根目录的扩展(GParted使用方法

            待模块安装完成,若在 /lib/modules/目录下生成了一个KERNEL_VERSION(5.0.2)则说明编译成功

    空间配置

    	mkinitramfs /lib/modules/5.0.2 -o /boot/initrd.img-5.0.2-generic
    

    编译完成

            到此为止,构建内核已经完成,把内核映像和System.map拷贝到/boot/目录下

    	cp /usr/src/linux-5.0.2/arch/x86/boot/bzImage /boot/vmlinuz-5.0.2-generic
    	cp /usr/src/linux-5.0.2/System.map  /boot/System.map-5.0.2
    	ln -s /boot/System.map-5.0.2  /boot/System.map
    

            或者执行make install一次性完成

    修改grup配置文件

    	cd /boot/grub/grub.cfg
    	chmod 777 grub.cfg
    	update-grub2	
    

    查看grub文件

            更新grub.cfg之后,文件中会出现新内核的启动目录,vim /boot/grub/grub.cfg查看内容

            vmlinuz:可引导、可压缩的内核,vmlinuz被加载后才能完成各种模块、服务的加载运行

            initrd.img:挂载根目录‘/’,以及其他的目录,比如:bin,dev,proc,sbin,sys等linux启动时必须的目录

            vmlinuz initrd.img和System.map详解

            在grub.cfg找到这两个关键配置之后,内核就可以成功启动了,重启之后进入新内核,在终端输入uname -r查看新内核

    卸载内核

    删除内核文件

    rm /boot/vmlinuz*KERNEL-VERSION* 
    rm /boot/initrd*KERNEL-VERSION*• 
    rm /boot/System-map*KERNEL-VERSION*• 
    rm /boot/config-KERNEL-VERSION• 
    rm -rf /lib/modules

    最后使用update-grub更新grub

     

    展开全文
  • linux内核编译

    千次阅读 2021-01-28 14:40:39
    前言 Linux内核是Linux操作系统的核心,也是整个Linux功能体现的核心,就如同发动机在汽车中的重要...如果用户想要使用这些新特性,或想根据自己的系统定制一个更高效、更稳定的内核,就需要手动编译Linux内核。那么如

    前言

    Linux内核是Linux操作系统的核心,也是整个Linux功能体现的核心,就如同发动机在汽车中的重要性。内核主要功能包括进程管理、内存管理、文件管理、设备管理、网络管理等。Linux内核是单内核设计,但却采用了微内核的模块化设计,支持内核线程以及动态装载内核模块的能力。

    Linux作为一个自由软件,在广大爱好者的支持下,内核版本不断更新。新的内核修订了旧内核的bug,并增加了许多新的特性。如果用户想要使用这些新特性,或想根据自己的系统定制一个更高效、更稳定的内核,就需要手动编译Linux内核。那么如何编译内核呢?本文将讲解Linux内核编译的详细程。

    内核编译之内核获取

    编译内核的前提是需要有新内核的源码包,获取源码包的渠道有很多,这里就不详细介绍了,建议直接去官方网站(www.kernel.org)下载。我这里准备的是3.10.10版本的源码包,尽量不要直接编译最新版本的内核,可能会造成不兼容等问题。

    wKioL1UaSeix-dlFAAB3S3Uwx1o412.jpg

    内核编译之解压源码包

    编译内核时,一般把源码解压到/usr/src目录下,解压完成后会在该目录下生成一个与源码包版本号一致的目录,为了方便起见,我们可将它做一个链接,链接为linux目录。

    wKioL1UZObaD1N9mAADOlNJL-GI139.jpg

    内核编译之配置内核

    编译内核首先需要安装开发环境(Development Tools和Server Platform Development),配置内核之前可以查看当前系统的设备信息,了解系统详细配置。

    12345678910 查看CPU信息:``cat /proc/cpuinfo``x86info #此工具需手动安装``lscpu``查看PCI:``lspci #可用选项-v查看详细信息``查看USB:``lsusb #可用选项-v查看详细信息``查看块设备:``lsblk

    配置内核可选用多种方法

    1234567 make config #遍历选择编译内核功能``make allyesconfig #启用内核全部功能``make allnoconfig #内核功能选项全部为否``make menuconfig #开启文本菜单选项,对窗口有限制,尽量调大窗口,否则会出错`` #使用此命令需安装gcc和ncurses-devel``make gconfig #依赖GNome桌面环境及GNome的图形开发环境,gtk2``make kconfig #依赖KDE桌面环境及KDE的图形开发环境,qt

    内核功能选项

    123 [*] #编译进内核本体``[M] #编译成内核模块``[ ] #不选择使用

    使用make menuconfig开启菜单选项,手动选择内核功能

    wKiom1UZS_mQcZATAAGp8Z-ylds766.jpg

    wKiom1UaSBbSK5j_AAKk9Mde6bQ979.jpg

    配置完成后,配置信息会存储于名为.config的隐藏文件,如果想方便配置,可复制/boot/config文件覆盖.config文件,直接修改即可。

    wKiom1UZVKuyxUOXAAFOCCVYQ9U514.jpg

    内核编译之编译安装

    编译时如果是远程连接,一旦断开连接,编译就会出问题。所以我们可使用screen命令(需安装),启动多个窗口,即使连接中断,编译也不会终止。

    1234 screen #开启窗口``Ctrl+A+D #隐藏窗口``screen - ls #查看运行的窗口``screen -r SCREEN_ID #返回窗口

    开始编译

    wKiom1UZWlnDO1pnAAHn6i3p1lA232.jpg

    安装模块

    wKiom1UZcTaDivctAALuw61O1-4433.jpg

    安装完成后在/lib/modules/目录下会生成一个同内核版本好的目录,目录下便是新内核的模块了

    wKioL1UZdD7RFD6QAABPZqs116Q968.jpg

    安装内核

    wKioL1UZeP7BdH0hAABvYzZfOu0521.jpg

    安装完成后会在/boot目录下生成几个新内核的文件

    wKioL1UZesfwiq9gAAD--Bmu7UA122.jpg

    查看grub.conf配置文件,会发现新内核的信息已经写入了

    wKiom1UZeoCi5rZFAAJM5_x-2kI391.jpg

    以新内核启动

    wKiom1UZe2mwohXHAAE6f6Dd9Hc576.jpg

    查看新内核版本

    wKiom1UZe__CW2gxAAAd_NmD9KU403.jpg

    补充:

    如果前面多次编译过,在编译开始之前可进行清理

    123 make clean #清理编译的文件,但保留配置文件`` make mrproper #移除所有编译生成的文件、配置文件和备份文件`` make distclean #完全清理

    如果想快速编译,可进行如下操作

    1 make -j * #*为cup核心数

    如果想将编译生成的文件保存至别处,可进行如下操作

    123 mkdir /path/to/somewhere #创建存放目录``cd /path/to/somewhere #进入目录``. /configure --ksource= /usr/src/linux #指定源目录

    如何只编译内核的部分代码

    123456789 只编译某子目录中的相关代码:``cd /usr/src/linux``make path /to/dir/``只编译部分模块:``make M=path /to/dir``只编译一个模块:``make path /to/dir/MOD_NAME .ko``将编译生成的文件保存至别处:``make O= /path/to/somewhere

    The end

    好了,内核编译的过程就是这样了,其中麻烦的地方除了需要消耗大量时间,也就是配置内核菜单了(英文伤不起...),想详细了解每个项目的意思请自行查资料。

    以上仅为个人总结,如有错漏,大神勿喷~

    以上就是良许教程网为各位朋友分享的Linux相关知识。

    展开全文
  • Linux 内核编译

    千次阅读 2010-05-23 00:49:00
    Linux 内核编译环境 Vmware + CentOS4.6一、下载Linux内核源码包查看当前系统的linux内核版本# uname –r2.6.9-67.ELsmp查看CentOS发行版版本# cat /etc/redhat-releaseCen

    Linux  内核编译

    环境   Vmware   + CentOS4.6

    一、下载 Linux 内核源码包

    查看当前系统的 linux 内核版本

    # uname  –r

    2.6.9-67.ELsmp

    查看 CentOS 发行版版本

    #  cat /etc/redhat-release

    CentOS release 4.6 (Final)

    发行版版本信息一般保存在 /etc/issue 文件中,也可以用 cat /etc/issue 命令 查看

    Linux内核发布的网站是 http://www.kernel.org ,但需要打补丁。可到 centos网站上,下载带 CentOS补丁的 rpm包。

    rpm包有两种,

    • Source RPM .src.rpm )包含一个 SPEC 文件( .spec ),源码包( .tar.gz, .tar.bz2 ),还有其它的一些源文件和补丁
    • Binary RPM .i386.rpm, .i686.rpm, .sparc64.rpm ),包括一些已编译文件,文档, 配置文件和 pre/post install/uninstall的脚本。

    此处要编译源文件,下载前者。

    CentOS网站上找到相应的内核版本 kernel-`uname -r`.src.rpm

    RPMS文件夹中放着 Binary RPM SPRAMS文件夹中存放着 Source RPM文件。

    下载 http://vault.centos.org/4.6/apt/i386/SRPMS.os/kernel-2.6.9-67.EL.src.rpm 到本地系统中。

    二、安装 Linux 内核源码树

    安装 rpm

    # rpm -ivh kernel-2.6.9-67.EL.src.rpm

    -i 安装, -v 显示安装包的真实名称 * 1 -h显示安装进度

    主要是一个解压的过程。

    /usr/src/redhat 目录下生成两个文件夹 SOURCES SPECS

    # cd /usr/src/redhat/;ls

    SOURCES  SPECS

    • SOURCES SOURCES  存储源代码。
    • SPECS SPECS  包含 spec  文件

    SOURCE S目 录下主要 linux内核源码包 linux-2.6.9.tar.bz2 1000多个 patch文件及 .config文件。

    SPECS目录下包含 kernel-2.6.spec文件

     

    Spec文件可看作 rpm工作的脚本文件。

    image

    spec 文件规范

    它包含了软件包的诸多信息,如软件包的名字、版本、类别、 说明摘要、创建时要执行什么指令、安装时要执行什么操作、以及软件包所要包含的文件列表等等。

    它主要包括

    • 文件头   包括软件包名,版本,开发者等
    • %prep   这个段是预处理段,通常用来执行一些解开源程序包的命令,为下一步的编译安装作准 备。
    • % b uild   本段是建立段,所要执行的命令为生成软件包服务,如 make  命令。
    • %install   本段是安装段,其中的命令在安装软件包时将执行,如 make install 命令。
    • %files   本段是文件段,用于定义软件包所包含的文件
    • %changelog   修改日志段

    #  cd /usr/src/SPECS

    # rpmbuild -bp --target=`uname  –m` kernel-2.6.spec

    -bp build through %prep (unpack sources and app ly patches) from <specfile>, <specfile> 文件的 %prep 段开始建立(解开源码包并打补丁)。

    -bp 命令只执行 %prep 段,解压源码包并打补丁。

    执 行完这一步后将会在 /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9 目录下生成完整的内核源码树。

    image

    三、 配置 Linux 内 核

    linux-2.6.9目录链接到 /usr/src/linux

    # cd /usr/src/

    # ln -s /usr/src/redhat/BUILD/ker nel-2.6.9/linux-2.6.9/ linux

    切 换到 linux 目 录下

    #  cd /usr/src/linux

    # vi Makefile

    修 改 Makefile 文 件,修改 EXTRAVERSION 选 项,给自己编译的内核盖个戳。

    image

    把 当前内核的配置文件拷贝到 linux 目 下下重命名为 .config

    # cp  /boot/config-`uname  r` .config

    .config 文 件本应该用 make menuconfig 来 生成,在本实验中,直接把当前内核的配置信息复制过来。就省去了 make me nuconfig 的麻烦。

    # make menuconfig

    此 处只是一个流程,选择默认 ,退出。

    image

    四、编译内核及内核模块

    # make

    这 是最主要的一步。 Makefile 的编译流程,

    • 使用命令行或者图形界面配置工具,对内核进行裁 减,生成 .config 配置文件
    • 保存内核版本信息到   include/linux/version.h
    • 产生符号链接   include/asm, 指向实际目录   include/asm-$(ARCH)
    • 为最终目标文件的生成进行必要的准备工作
    • 递归进入   /init  /core   /dri vers   /net   /lib等目录和其中的子目录来编译生成所有的目标文件
    • 链接上述过程产生的目标文件生成 vmlinux vmlinux 存放在内核代码树的根目录下
    • 最后根据   arch/$(ARCH)/Makefile 文件定义的后期编译的处理规则建立最终的映象 bootimage, 包括创建引导记录、准备 initrd 映象和相关处理

    五、安装内核

    Insert 内核模块,理解是,很多的 insmod 操作 * 2

    # make modules_install

    安 装内核

    # make install

    boot 目 录下多出了以下 文件

    v mlinuz-2.6.9-lunix1.0是可引导的、压缩的内核。

    System.map-2.6.9-lunix1.0内核符号表 , Linux内核不使用符号名,而是通过变量或函数的地址来识别变量或 函数名 .  符号表是所有符号连同它们的地址的列表。

    image

    关于 initrd-2.6.9-lunix1.0.img 文件

    /boot/grub/menu.lst 中除了配置 root kernel还要配置 initrd Initrd指定系统启动访问真正的根文件系统前,访问的 ramdisk映象。

    initrd***.im g把一段程序打包到 img里,然后在开机的时候在内存里开辟一段区域,一般是 2m,释放到那里运行,都是一些初始化的程序,比如 sisc_mod ext3 sd_mod等模块和 insmod nash等命令。不同内核,初始化的 img可以相同,也可以不同,如果没有,可以在 grub.conf里加上 no initrd,它就跳过 initrd的检测和执行了。

    它的作用是在没有 mount / 分区以前,系统要执行一些操作,比如挂载 scsi 驱动,它就把 initrd 释放到内存里,作一个虚拟的 /

    现在解压 initrd, 并查看里面的文件

    # mkdir initrd

    # cd initrd/

    # cp /boot/initrd-2.6.9-lunix1.0.img initrd.gz

    # gunzip initrd.gz

    # cpio -ivmd < initrd

    # ls

    bin  dev  etc  init  initrd  lib  loopfs  proc  sbin  sys  sysroot

    initrd 目录中就是系统启动时临时 root 的内容。目录下有一个 init 文件,该文件最为重要,它就是内核启动后执行的第一个脚本。实际 上内核启动后寻找的就是 /init ; bin/init ;/bin/init,找 到任何一个就执行它。整个的初始化从它开始。用 file cat命令查看一下

    # file init

    init: a /bin/nash script text executable

    # cat init

    #!/bin/nash

     

    mount -t proc /proc /proc

    setquiet

    echo Mounted /proc filesystem

    echo Mounting sysfs

    mount -t sysfs non e /sys

    echo Creating /dev

    mount -o mode=0755 -t tmpfs none /dev

    mknod /dev/console c 5 1

    mknod /dev/null c 1 3

    mknod /dev/zero c 1 5

    mkdir /dev/pts

    mkdir /dev/shm

    echo Starting udev

    /sbin/udevstart

    echo -n "/sbin/hotplug" > /proc/sys/kernel/hotplug

    echo "L oading scsi_mod.ko module"

    insmod /lib/scsi_mod.ko

    echo "Loading sd_mod.ko module"

    insmod /lib/sd_mod.ko

    echo "Loading mptbase.ko module"

    insmod /lib/mptbase.ko

    echo "Loading mptscsi.ko module"

    insmod /lib/mptscsi.ko

    echo "Loading mptspi.ko module"

    insmod  /lib/mptspi.ko

    echo "Loading mptsas.ko module"

    insmod /lib/mptsas.ko

    echo "Loading mptscsih.ko module"

    insmod /lib/mptscsih.ko

    echo "Loading libata.ko module"

    insmod /lib/libata.ko

    echo "Loading ata_piix.ko module"

    insmod /lib/ata_piix.ko

    echo "Loading jbd .ko module"

    insmod /lib/jbd.ko

    echo "Loading ext3.ko module"

    insmod /lib/ext3.ko

    /sbin/udevstart

    echo Creating root device

    mkrootdev /dev/root

    umount /sys

    echo Mounting root filesystem

    mount -o defaults --ro -t ext3 /dev/root /sysroot

    mount -t tmpfs --bind   /dev /sysroot/dev

    echo Switching to new root

    switchroot /sysroot

    umount /initrd/dev

    第一行 #!/bin/nash 是一个 redhat 自己的微型解释器。不是 bash

    它的主要流程是

    mount 命令加载各种内核文件系统 proc,sys

    mknod 创建系统启动所必须的 /dev 设备节 点。

    insmod 开始安装 scsi 等设 备。

    udevstart  开始监听这些设备

     

    m krootdev  使它后面的参数 /dev/root成为一个块节点从而使得根分区设备被挂载 ,其中根分区设备由 grub.conf里面的 kernel命令后面所带的参数 root=决定。

     

    mount -o defaults --ro -t ext3 /dev/root /sysroot

    加载 /dev/root /sysroot下。这时真正的 root才被加载到了系统中。至此 /sysroot下是真正的 root分区。 / initrd的内存盘。

    switchroot  切换到新的 root,卸载 /dev,/proc,/sys文件系统,寻找新的 init

    六、启动新内核

    查看 /boot/grub/menu.lst文件,多了 title CentOS(2.6.9-lunix1.0)设 置为默认启动项。

    image

    重新启动 reboot

     

    启动菜单,多了 2.6.9-lunix1.0

    image

    用自行编译的内核启动,输入 uname –r显示

    image

    * 1 显示操作过程中详细信息

    * 2 将新编译内核树中的模块( .ko)文件拷贝到 /lib/modules/<version>下,并做模块相关性处理 (depmod);此时不会做 insmod操作

     

    展开全文
  • Linux内核编译流程(Menuconfig图形化方式)Menuconfig配置内核原理:在Linux里面我们所看到的menuconfig界面是通过配置内核顶层的Kconfig产生的,而当输入make menuconfig命令的时候系统会读取Makefile来解析...

    更多技术干货,欢迎扫码关注博主微信公众号:HowieXue,一起学习探讨软硬件技术知识经验,关注就有海量学习资料免费领哦:
    在这里插入图片描述



    详解Linux内核编译配置(menuconfig)、文件系统制作

    • Linux内核配置原理
    • Menuconfig主要功能选项介绍
    • 编译配置内核步骤
    • 制作文件系统步骤
    • 文件系统和根文件系统区别联系

    一、Linux内核配置原理

    Linux内核的配置系统由三个部分组成,

    分别是:
    1、Makefile:分布在 Linux 内核源代码根目录及各层目录中,定义 Linux 内核的编译规则;
    2、配置文件(config.in):给用户提供配置选择的功能;
    3、配置工具:包括配置命令解释器(对配置脚本中使用的配置命令进行解释)和配置用户界面(提供基于字符界面、基于 Ncurses 图形界面以及基于 Xwindows 图形界面的用户配置界面,各自对应于 Make config、Make menuconfig 和 make xconfig)。

    Linux 内核的编译菜单有3中方法:

    1)make config:进入命令行,可以一行一行的配置,这不方便使用,但用命令执行一遍会对编译过程有更深了解,这里不具体介绍。
    2)make menuconfig:进入我们熟悉的 menuconfig 菜单,图形化界面选择配置
    3)make xconfig:在2.4.X 以及以前版本中 xconfig 菜单是基于 TCL/TK 的图形库的,没有接触过。。貌似淘汰了。

    Menuconfig配置内核原理:

    在Linux里面我们所看到的menuconfig界面是通过配置内核顶层的Kconfig产生的,而当输入make menuconfig命令的时候系统会读取Makefile来解析Kconfig。
      通常会在Kconfig里面编写以下四项:
      1、模块的名字,用module开头;
      2、选项,通常设为bool(二选一)或者trastate(三选一);
      3、默认选项;
      4、帮助说明。
    关于KConfig 详细介绍可参考 http://blog.sina.com.cn/s/blog_4ba5b45e0102e6vp.html


    二、Menuconfig主要功能选项介绍:

    在源码目录键入# make menuconfig ARCH=arm 后出现下面Menu:(Menuconfig主界面)
    这里写图片描述

    其中General setup 中重要的选项包括:

    • Cross-compiler tool prefix 交叉编译工具前缀(如arm-linux-);
    • Local version - append to kernel release 内核显示的版本信息;
    • System V IPC 表示系统的进程间通信Inter Process
    • Communication,它用于处理器在程序之间同步和交换信息
    • Enable eventpoll support:支持事件轮循的系统调用。

    2、Enable loadable module support 重要的选项包括:(内核模块配置)

    • Module unloading 允许卸载已经加载的模块
    • Module versioning support 允许使用其他内核版本的模块(可能会出问题)
    • Source checksum for all modules 为所有的模块校验源码,如果你不是自己编写内核模块就不需要它这个功能。

    3、Enable the block layer 块设备支持,使用硬盘/USB/SCSI设备者必选这选项使得块设备可以从内核移除。。重要的选项包括:

    • Support for large (2TB+) block devices and files 仅在使用大于2TB的块设备时需要
    • Block layer bio throttling support 可用于限制设备的IO速度
    • IO Schedulers IO调度器I/O是输入输出带宽控制,主要针对硬盘,是核心的必须的东西。这里提供了三个IO调度器。

    4、Processor type and features (处理器类型及特点)

    • Symmetric multi-processing support 对称多处理器支持,如果你有多个CPU或者使用的是多核CPU就选上
    • Processor family (Pentium-Pro)处理器系列, 请按照实际使用的CPU选择,这里是处理器的类型
    • Generic x86 support 这一选项针对x86系列的CPU使用更多的常规优化。如果你在上面一项选的是i386、i586之类的才选这个通用x86支持,
    • Multi-core scheduler support 针对多核CPU进行调度策略优化多核调度机制支持,双核的CPU要选

    5、 Power management and ACPI options (电源管理相关)
    6、Bus options(PCI 、ISA 等总线的支持和配置.)
    7、Executable file formats / Emulations (没用过,不大了解)
    8、Networking support (网络配置,重要)

    • Networking options 网络协议和网络包参数配置(其中TCP/IP相关协议必须打开)
    • Wireless 使用无线网卡支持
      RF switch subsystem support RF 切换设备

    9、Device Drivers (设备驱动)

    • Generic Driver Options
    • Block devices 想要支持的块设备,比如ramdisk , 磁盘阵列,CD/DVD 刻录等
    • Misc devices 需要支持的杂项设备
    • SCSI device support SCSI 设备驱动
    • Serial ATA and Parallel ATA drivers SATA 设备驱动
    • IEEE 1394 (FireWire) support
    • Network device support 如Ethernet (1000 Mbit) 选择自己对应的硬件
    • Character devices 字符设备,一般自己写的传感器类驱动都是字符型,需要在里面配置,包括串口TTY等。
    • SPI/I2C support
    • Sound card support 声卡

    10、Firmware Drivers (BIOS相关,部分系统管理工具可能会用到 )
    11、File systems (文件系统支持,重要!)

    • The Extended 4 (ext4) filesystem
    • Ext4 Security Labels <=== 取消 SELinux 支持
    • XFS filesystem support
    • ISO 9660 CDROM file system support
    • NTFS file system support

    12、Kernel hacking (内核调试相关,木有用过)
    13、Security options (安全相关选项)

    • Cryptographic API —> // 加密API ,这部分选项会根据此前的优化自动调整

    三、编译配置内核步骤

    以Linux3.5内核版本为例,先解压linux-3.5源码,
    然后cd到目录中输入:

    make menuconfig ARCH=arm

    这里写图片描述

    根据硬件选择处理器选型(配置):

    这里写图片描述
    网络协议配置(可根据软硬件需求对其进行裁剪):

    这里写图片描述

    这里写图片描述

    设备驱动:图是网卡驱动
    这里写图片描述
    根据自己的芯片选择相应的网卡驱动
    这里写图片描述

    文件系统选择:比如系统想使用ex4文件系统 就空格勾选上
    这里写图片描述
    图中取值方式:<>为不选择, <*> 则压缩到内核映像zImage放到内存中运行,< M>为编译成moudule内核模块,存放在ROM中,使用时由zImage调用动态加载到内存

    在makemenuconfig里面选中的 都会在.config文件中查询到:(相关Cofig配置成y,则编译内核代码时会将此相关代码编译,此时为静态编译)

    这里写图片描述

    选择好后就make进行编译内核,编译完成会在arch/arm/boot目录下生成zImage,这就是内核映像文件,直接可以烧进板子(SD卡或者USB)


    四、文件系统制作步骤

    首先安装工具包linux_tools.tgz

    tar xvzf linux_tools.tgz -C /

    然后生成文件系统镜像文件(qtopia_qt4.img)

    make_ext4fs -s -l 314572800 -a root -L linux rootfs_qtopia_qt4.img rootfs_qtopia_qt4

    执行make_ext4fs命令之后即会将rootfs_qtopia_qt4文件打包成 rootfs_qtopia_qt4.img 文件系统镜像。

    • l314572800“是分区大小 -s就是生成ext4的S模式制作;
    • 314572800/1024/1024 = 300M
    • -a root 是指这个img用于Linux系统(若为-a system即表示为android系统,挂载点即是/system。
    • ./rootfs_qtopia_qt4.img 表示在当前目录下生成镜像文件。
    • ./rootfs_qtopia_qt4 指定根文件系统源路径

    可以把自己写的应用程序放到rootfs_qtopia_qt4这个里面,然后打包成ext4文件系统镜像文件,这样应用程序就在固定在系统里,不用再二次安装了。

    重点解释下:make_ext4fs 命令用来制作ext4文件系统的镜像,首先要把工具包解压到usr/bin 。使用方法参考:

    make_ext4fs -s -l 512M -a system system_new.img system

    512M表分区大小 第一个system表示挂载点为/system, 第二个system表示system目录。
    新生成的system_new.img就可以用来烧写了。


    五、文件系统和根文件系统区别联系

    很多人分不清文件系统根文件系统的区别和联系:

    个人理解,所谓**根文件系统(Root Filesytem)**就是要包括linux启动时所必须的目录和关键性的文件、命令,所组成整个文件目录结构,即为根文件系统。
    例如linux启动时所需要的init文件 linuxrc 挂载分区时linux去找的/etc/fstab 这个挂载文件等,根文件系统还包括许多应用程序bin、sbin目录等。
    根文件系统可以用busybox直接生成

    所谓文件系统(File System):指的是用来方便管理文件存储和数据组织的一种方法。常见的linux文件系统:NFS 网络根文件系统、YAFFS2针对nandflash, EXT3,EXT4 等。还有如大家熟悉的Windows下FAT、FAT32、NTFS系统等
    文件系统需要根据系统类型和硬件支持,使用打包工具(如Make_ext4)生成


    博主热门文章推荐:

    一篇读懂系列:

    LoRa Mesh系列:

    网络安全系列:

    嵌入式开发系列:

    AI / 机器学习系列:


    展开全文
  • Linux内核编译,启动带linux内核的模拟器。  上一篇总结了安卓5.0源码的编译和启动其自带的模拟器。安卓源码是不包括linux内核的,而是使用的谷歌预先编译好的内核,其代码路径是在prebuilt/android-arm/...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,941
精华内容 9,576
关键字:

linux内核编译

linux 订阅