精华内容
下载资源
问答
  • 2021-05-10 21:50:19

    编译linux内核步骤:

    1、安装内核

    如果内核已经安装(/usr/src/目录有linux子目录),跳过。如果没有安装,在光驱中放入linux安装光盘,找到kernel-source-2.xx.xx.rpm文件(xx代表数字,表示内核的版本号),比如RedHat linux的RPMS目录是/RedHat/RPMS/目录,然后使用命令rpm -ivh kernel-source-2.xx.xx.rpm安装内核。如果没有安装盘,可以去各linux厂家站点或者www.kernel.org下载。

    2、清除从前编译内核时残留的.o 文件和不必要的关联

    cd /usr/src/linux

    make mrproper

    3、配置内核,修改相关参数,请参考其他资料

    在图形界面下,make xconfig;字符界面下,make menuconfig。在内核配置菜单中正确设置个内核选项,保存退出

    4、正确设置关联文件

    make dep

    5、编译内核

    对于大内核(比如需要SCSI支持),make bzImage

    对于小内核,make zImage

    6、编译模块

    make modules

    7、安装模块

    make modules_install

    8、使用新内核

    把/usr/src/linux/arch/i386/boot/目录内新生成的内核文件bzImage/zImage拷贝到/boot目录,然后修改/etc/lilo.conf文件,加一个启动选项,使用新内核bzImage/zImage启动。格式如下:

    boot=/dev/hda

    map=/boot/map

    install=/boot/boot.b

    prompt

    timeout=50

    linear

    default=linux-new ### 告诉lilo缺省使用新内核启动linux ###

    append="mem=256M"

    image=/boot/vmlinuz-2.2.14-5.0

    label=linux

    read-only

    root=/dev/hda5

    image=/boot/bzImage(zImage)

    label=linux-new

    read-only

    root=/dev/hda5

    保留旧有的启动选项可以保证新内核不能引导的情况,还可以进入linux进行其他操作。保存退出后,不要忘记了最重要的一步,运行/sbin/lilo,使修改生效。

    9、重新生成ram磁盘

    如果您的系统中的/etc/lilo.conf没有使用了ram磁盘选项initrd,略过。如果您的系统中的/etc/lilo.conf使用了ram磁盘选项initrd,使用mkinitrd initrd-内核版本号,内核版本号命令重新生成ram磁盘文件,例如我的Redhat 6.2:

    mkinitrd initrd-2.2.14-5.0 2.2.14-5.0

    之后把/etc/lilo.conf中的initrd指向新生成的initrd-2.2.14-5.0文件:

    initrd=/boot/initrd-2.2.14-5.0

    ram磁盘能使系统性能尽可能的优化,具体参考/usr/src/linux/Documents/initrd.txt文件

    10、重新启动,OK!

    温馨提示:答案为网友推荐,仅供参考

    更多相关内容
  • 一张图看懂Linux内核

    2021-05-10 02:41:18
    1. 前言本文主要讲解什么是Linux内核,以及通过多张图片展示Linux内核的作用与功能,以便于读者能快速理解什么是Linux内核,能看懂Linux内核。拥有超过1300万行的代码,Linux内核是世界上最大的开源项目之一,但是...

    1. 前言

    本文主要讲解什么是Linux内核,以及通过多张图片展示Linux内核的作用与功能,以便于读者能快速理解什么是Linux内核,能看懂Linux内核。

    拥有超过1300万行的代码,Linux内核是世界上最大的开源项目之一,但是内核是什么,它用于什么?

    173626435_1_20191020061329815

    一张图看懂Linux内核

    173626435_2_20191020061329909

    Linux内核是什么

    2. 什么是内核

    内核是与计算机硬件接口的易替换软件的最低级别。它负责将所有以“用户模式”运行的应用程序连接到物理硬件,并允许称为服务器的进程使用进程间通信(IPC)彼此获取信息。

    3. 内核还要分种类?

    是的,没错。

    3.1 微内核

    微内核只管理它必须管理的东西:CPU、内存和IPC。计算机中几乎所有的东西都可以被看作是一个附件,并且可以在用户模式下处理。微内核具有可移植性的优势,因为只要操作系统仍然试图以相同的方式访问硬件,就不必担心您是否更改了视频卡,甚至是操作系统。微内核对内存和安装空间的占用也非常小,而且它们往往更安全,因为只有特定的进程在用户模式下运行,而用户模式不具有管理员模式的高权限。

    173626435_3_20191020061330831

    微内核

    3.1.1 Pros可移植性

    安装占用空间小

    小内存占用

    安全

    3.1.2 Cons通过驱动程序,硬件更加抽象

    硬件可能反应较慢,因为驱动程序处于用户模式

    进程必须在队列中等待才能获得信息

    进程不能在不等待的情况下访问其他进程

    3.2 单内核

    单内核与微内核相反,因为它们不仅包含CPU、内存和IPC,而且还包含设备驱动程序、文件系统管理和系统服务器调用等内容。单内核更擅长于访问硬件和多任务处理,因为如果一个程序需要从内存或运行中的其他进程中获取信息,那么它就有一条更直接的线路来访问信息,而不需要在队列中等待来完成任务。但是,这可能会导致问题,因为在管理模式下运行的东西越多,如果行为不正常,就会有越多的东西导致系统崩溃。

    173626435_4_20191020061330924

    单内核

    3.2.1 Pros更直接地访问程序的硬件

    流程之间更容易通信

    如果支持您的设备,它应该不需要额外安装就可以工作

    进程反应更快,因为没有等待处理器时间的队列

    3.2.2 Cons较大安装体积

    较大内存占用

    不太安全,因为所有操作都在管理模式下运行

    173626435_5_20191020061330971

    内核对比monolithic_vs_microkernel

    4. 混合的内核

    混合内核能够选择在用户模式下运行什么,以及在管理模式下运行什么。通常情况下,设备驱动程序和文件系统I/O将在用户模式下运行,而IPC和服务器调用将保持在管理器模式下。这是两全其美,但通常需要硬件制造商做更多的工作,因为所有驱动程序的责任都由他们来承担。它还可能存在一些与微内核固有的延迟问题。

    173626435_6_2019102006133296

    混合的内核

    4.1 Pros开发人员可以选择什么在用户模式下运行,什么在管理模式下运行

    比单片内核更小的安装占用空间

    比其他型号更灵活

    4.2 Cons会遭受与微内核相同的进程延迟

    设备驱动程序需要由用户管理(通常)

    5. Linux内核文件在哪里

    Ubuntu中的内核文件存储在/boot文件夹中,称为vmlinux -version。vmlinuz这个名字来自于unix世界,早在60年代,他们就把内核简单地称为“unix”,所以当内核在90年代首次开发时,Linux就开始把内核称为“Linux”。

    173626435_7_20191020061332190

    Linux内核文件在哪里

    当开发虚拟内存以便更容易地进行多任务处理时,将“vm”放在文件的前面,以显示内核支持虚拟内存。有一段时间,Linux内核被称为vmlinux,但是内核变得太大,无法装入可用的引导内存,因此压缩了内核映像,并将末尾的x更改为z,以显示它是用zlib压缩的。并不总是使用相同的压缩,通常用LZMA或BZIP2替换,一些内核简单地称为zImage。

    版本号将采用A.B.C.格式D在。B可能是2.6,C是您的版本,D表示您的补丁或补丁。

    173626435_8_20191020061332346

    linux版本号

    在/boot文件夹中还有其他非常重要的文件,称为initrd.img-version、system.map-version, config-version。initrd文件用作一个小RAM磁盘,用于提取和执行实际的内核文件。这个系统。map文件用于内核完全加载之前的内存管理,配置文件告诉内核在编译内核映像时要加载哪些选项和模块。6. Linux内核体系结构

    因为Linux内核是单片的,所以它比其他类型的内核占用空间最大,复杂度也最高。这是一个设计特性,在Linux早期引起了相当多的争论,并且仍然带有一些与单内核固有的相同的设计缺陷。

    173626435_9_20191020061332424

    Linux内核体系结构

    为了解决这些缺陷,Linux内核开发人员所做的一件事就是使内核模块可以在运行时加载和卸载,这意味着您可以动态地添加或删除内核的特性。这不仅可以向内核添加硬件功能,还可以包括运行服务器进程的模块,比如低级别虚拟化,但也可以替换整个内核,而不需要在某些情况下重启计算机。

    想象一下,如果您可以升级到Windows服务包,而不需要重新启动……

    7. 内核模块

    如果Windows已经安装了所有可用的驱动程序,而您只需要打开所需的驱动程序怎么办?这本质上就是内核模块为Linux所做的。内核模块,也称为可加载内核模块(LKM),对于保持内核在不消耗所有可用内存的情况下与所有硬件一起工作是必不可少的。

    173626435_10_20191020061332534

    内核模块

    模块通常向基本内核添加设备、文件系统和系统调用等功能。lkm的文件扩展名是.ko,通常存储在/lib/modules目录中。由于模块的特性,您可以通过在启动时使用menuconfig命令将模块设置为load或not load,或者通过编辑/boot/config文件,或者使用modprobe命令动态地加载和卸载模块,轻松定制内核。

    第三方和封闭源码模块在一些发行版中是可用的,比如Ubuntu,默认情况下可能无法安装,因为这些模块的源代码是不可用的。该软件的开发人员(即nVidia、ATI等)不提供源代码,而是构建自己的模块并编译所需的.ko文件以便分发。虽然这些模块像beer一样是免费的,但它们不像speech那样是免费的,因此不包括在一些发行版中,因为维护人员认为它通过提供非免费软件“污染”了内核。

    内核并不神奇,但对于任何正常运行的计算机来说,它都是必不可少的。Linux内核不同于OS X和Windows,因为它包含内核级别的驱动程序,并使许多东西“开箱即用”。希望您能对软件和硬件如何协同工作以及启动计算机所需的文件有更多的了解。

    8. 总结

    通过本文,您应该较好地理解什么是Linux内核以及通过一张或者多张图看懂Linux内核的作用了吧?

    展开全文
  • 内核的编译和安装

    2021-05-12 03:44:28
    它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序什么时候对某部分硬件操作多长时间。内核的分类可分为单内核和双内核以及微内核, Linux是一个具有某些微内核...

    内核是操作系统最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。内核的分类可分为单内核和双内核以及微内核, Linux是一个具有某些微内核特征的单内核。

    二:编译新内核:

    # tar xf linux-2.6.30.tar.bz2  -C /var/src

    # cd /var/src/

    # ln -sv linux-2.6.30 linux

    # yum groupinstall "Development Tools" "Development Libraries"

    这两个包组必须装上,否则安装内核时要出错

    # cd linux

    三 :开始安装新的内核:

    # make menuconfig

    # 打开如图所示:

    0ac731784979958d05ddbf9f74b82c48.png

    现在看着这么多选项是不是不知道该选那些,一个一个去选真的坑爹

    现在redhat官方很贴心的给了我们大部分常用的选项,我们拿来这次基础上修改我们需要的就可以了。

    # 在/boot下有个config-2.6.18-164.el5  名字可能不同

    #cp /boot/config-2.6.18-164.el5  /usr/src/linux/.config

    #make menuconfig

    选择自己要安装的选项这大大减少了工作量。

    [ ] : 不启用此项

    [*] : 编译进内核

    :编译成模块

    四 :编译内核:

    #  make

    五 安装:

    # make modules_install

    # make install

    六 修改开机时默认选择我们新装的内核:

    # vim /boot/grub/grub.conf

    修改default=1为default=0

    3643d4b38ba60454d8e81f99e288c02c.png

    进入系统

    #uname -r

    查看当前系统的版本看是不是刚你所装的内核

    至此结束....

    展开全文
  • 自然的做法:凡是为进程服务的模块就应放在操作系统的内核中。例如:文件管理模块是为进程服务的,所以应放在内核中;设各驱动模块是为进程服务的,所以要放在内核中;进程管理模块当然也要放在内核中。随着进程对...
  • Linux内核中Makefile

    2021-01-09 15:45:40
     由于 Linux 内核源代码是按照树形结构组织的,所以 Makefile 也被分布目录树中。Linux 内核中的 Makefile 以及与 Makefile 直接相关的文件有:  1. Makefile:顶层 Makefile,是整个内核配置、编译的总体控制...
  • linux4.19内核源码

    2020-10-08 16:00:17
    进入上面的网址下载所需要编译的Linux内核,我选择了最新4.19.0版的内核,下载后为压缩包。(*请先保证网络正常) 2、存放 创建一个专属的文件夹,存放该压缩包。 二、编译部分 1、解压缩 如下图所示,并保证要进入...
  • 这个图是X86 PC上的Linux 内核的引导过程,嵌入式系统上的Linux内核的引导过程基本类似。不同只是X86 PC上有一个从BIOS转移到Bootlloader的过程,嵌入式系统往往是复位后就直接运行Bootloader。从图上可以看出,...

    先给大家来个图来总体认识一下Linux内核的引导过程,然后详细介绍。

    6903f93cefdc7933f812278b749fff61.png

    这个图是X86 PC上的Linux 内核的引导过程,在嵌入式系统上的Linux内核的引导过程基本类似。不同只是在X86 PC上有一个从BIOS转移到Bootlloader的过程,嵌入式系统往往是复位后就直接运行Bootloader。

    从图上可以看出,在系统启动进入与Linux相关代码之前,会经历如下阶段:

    1)当系统上电或复位时,CPU会将程序计数器指针赋值为一个特定地址0XFFF0,并执行该地址里存放的指令。在PC中,该地址是存放在BIOS中,它保存在主板上的ROM或Flash中。

    2)BIOS运行时安装CMOS的设置定义的启动设备顺利来搜索处于活动状态且可以引导的设备。若从硬盘启动,BIOS会将硬盘MBR(主引导记录)中的内容加载到RAM。当MBR被加载到RAM中之后,BIOS就会将控制权交给MBR。

    3)主引导加载程序查找并加载次引导加载程序。它在分区表中查找活动分区,当找到一个活动分区时,扫描分区表中的其他分区,一确保它们都不是活动的。当这个过程验证完成之后,就将活动分区的引导记录从这个设备中读入RAM并执行它。

    4)次引导加载程序加载Linux内核和可选的初始RAM磁盘,将控制权交给Linux内核源代码。

    5)运行被加载的内核,并启用用户空间应用程序。

    下面都上边加到linux内核的步骤5进行更详细的分析,它主要是完成启动内核并运行用户空间的init进程的功能。

    当内核映像被加载到RAM之后,Bootloader的控制权被释放。内核映像并不是可直接执行的目标代码,而是一个压缩过的zImage(小内核)或者bzImage(大内核)。当bzImage(用于i386映像)被调用时它从/arch/i386/boot/head.S的start汇编例程开始执行。这个例程进行一些基本的硬件配置,并调用/arch/i386/boot/compressed/head.S中的 startup_32例程。它设置一个基本的的运行环境(如堆栈)后清除BSS段,调用/arch/i386/boot/compressed/misc.c中的decompressed_kernel()解压缩内核。如下图:

    46058b8c54eebb5ed434917a5f7ce15d.png

    内核被解压缩到内存中之后会再调用/arch/i386/kernel/head.S文件中的startup_32例程,这个新的例程会初始化页表,并启用内存分页机制,接着为任何可选的浮点单元(FPU)检测CPU的类型,并将其存储起来供以后使用。

    这些都在做完以后,/init/main.c中的start_kernel()函数被调用,进入到与体系结构无关的Linux内核部分。

    start_kernel()函数会调用一系列初始化函数来设置终端,执行进一步的内存配置。之后,/arch/i386/kernel/process.c中kernel_thread()被调用一启动第一个核心线程,该线程执行init()函数,而原执行序列会调用cpu_idle(),等待调度。

    作为核心线程的init()函数完成外设及其驱动程序的加载和初始化,挂载根文件系统。init()打开/dev/console设备,重定向stdin,stdout和stderr到控制台。之后,它搜索文件系统中的init程序(当然也可以用"init="命令行参数制定init程序),并使用execve()系统调用执行init程序。其中搜索的顺序为/sbin/init,/etc/init,/bin/init和/bin/sh。在嵌入式系统中,多数情况下,可以给内核传入一个简单的shell脚本来启动必需的嵌入式应用程序。

    走到这里,终于把linux内核的引导和启动过程给走完了,而init()对应的由start_kernel()创建的第一个线程也进入到用户模式。

    注:本文参考了人民邮电出版社《Linux设备驱动开发详解》一书,再次表示感谢。

    展开全文
  • Linux核心源程序通常都安装/usr/src/linux下,而且它有一个非常简单的编号约定:任何偶数的核心(的二个数为偶数,例如2.0.30)都是一个稳定地发行的核心,而任何奇数的核心(例如2.1.42)都是一个开发中的核心核心源...
  • 安装oracle内核参数说明及设置  kernel.shmmax  说明:  · Linux进程可以分配的单独共享内存段的大值(byte)  · 64位的linux操作系统,设置应该大于SGA_MAX_TARGET或MEMORY_MAX_TARGET的值/或者1/2的物理...
  • 内核和微内核介绍

    千次阅读 2019-08-28 18:47:44
    内核:简单来说,就是把很多东西都集成进内核,例如linux内核,除了最基本的进程、线程管理、内存管理外,文件系统,驱动,网络协议等等都在内核里面。将内核从整体上作为一个大过程实现,并同时运行一个单独的...
  • 内核的最终目的:运行应用程序。 通过之前对uboot的分析我们知道uboot启动内核的时候执行的是下面的函数 其中theKernel就是内核的入口地址,然后传进去了三个参数,那么我们的内核刚开始肯定是处理这三个参数。 ...
  • 1、Linux内核源代码目录结构arch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录,如i386、arm、powerpc、mips等。block:块设备驱动程序I/O调度。crypto:常用加密和散列算法(如AES、SHA等),还有一些...
  • OS的数据都是存放于系统空间用户进程和系统进程的所有数据都内存中,分开存放,防干扰。用户态:执行用户代码库函数,只能访问用户空间内核态:执行系统调用后,可以访问用户空间和内核空间用户态切换到内核态的3...
  • 内核栈的使用

    2020-11-18 23:58:37
    在内核中使用了一个深度函数调用(多层嵌套的函数),但没有实现预定的效果,但如果把嵌套去掉,函数就没问题了。当时我也没有多想,就回答可能是编译器的问题。回来后头脑中又浮现出这个问题,突然想到内核栈,...
  • linux内核镜像的加载地址和入口地址 uboot引导linux内核镜像(uImage)启动时,会有2个地址 加载地址(Load Address),即内核镜像整体要放置的内存空间位置 入口地址(Entry Point),即从内核镜像中开始执行的地址...
  • Linux内核源代码位于/usr/src/linux目录下,其结构分布如图1.3所示,每一个目录或子目录可以看作一个模块,其目录之间的连线表示“子目录或子模块”的关系。下面是对每一个目录的简单描述。Arch目录包括了所有和体系...
  • 近年来,我国自主研发操作系统被反复提及。近期,一个计算机领域内非常专业的词来到了几乎所有人的视线内,这就是——微内核。人们对操作系统内核的讨论越来越热烈,甚至有人说我不懂什么叫微内核,什么...
  • linux内核目录详解

    2021-07-26 15:34:25
    内核源码目录: > arch: 包含和硬件体系相关的的代码,每种硬件平台占一个相应的目录,如i386,arm, arm64, powerpc,mips等。 > block: 块设备驱动程序I/O调度。 > crypto: 常用的加密和散列算法,还有一些...
  • 内核内核

    2020-06-21 21:42:04
    因为所有的模块都是在内核里,那优点就是处理效率高,但随着内核增大,管理起来也越不方便,而且只要其中一个模块出现问题,就会导致整个内核崩溃,系统的稳定性就差一些。 微内核是指将内核模块化设计,大部分内核...
  • 链表是存放和操作可变数量元素的数据结构,它可需要时动态创建结点并插入链表中,编译时不需知道包含多少个元素,而且它内存中也无须占用连续内存区。  内核有许多链表的实现,而且还有其官方内核实现,...
  • 什么是内核——linux内核解析

    千次阅读 2021-01-29 16:30:11
    【本文内容参考自Linux内核设计与实现,仅作笔记】 一、内核介绍 1.什么是内核 用户操作的界面是操作系统的外在表象,内核才是操作系统的内在核心。系统其它部分 必须依靠内核这部分软件提供的服务,像管理硬件设备...
  • Linux内核调试方法

    千次阅读 2021-09-30 16:46:33
    包含这个bug的内核版本号,需要分析出这个bug哪一个版本被引入,这个对于解决问题有极大的帮助。可以采用二分查找法来逐步锁定bug引入版本号。 对内核代码理解越深刻越好,同时还需要一点点运气。 该bug可以...
  • 内核硬件和操作系统之间形成一层的软件,它分为两种主要类型,即,宏内核和MicroKernel,这些类型主要是根据它们对进程的管理方式来区分的,它们以下方面也有所不同:执行样式,大小,速度,稳定性,进程间...
  • 操作系统启动时,内核是首先加载到内存的部分,保证尽可能小的内存使用的同时要尽可能多的为操作系统的应用程序和其他部分提供基本的服务,内核通常负责内存管理、进程和任务管理、设备管理、IO通信、中
  • 进程进程不仅仅是一段可执行程序的代码,通常进程还包括其他资源,比如打开的文件,挂起的信号,内核内部的数据结构,处理器状态,内存地址空间,或多个执行线程,存放全局变量的数据段等。线程是进程中活动的对象,...
  • 8.内核模块(驱动模块)

    千次阅读 2021-10-02 20:51:01
    应用层中,每一个.exe/.dll都称之为模块,也就是PE文件.一个进程中除了自身主模块可以包含多个模块(dll). 2).驱动程序每一个都是一个模块,称为"内核模块",都可以加载到内核中,都遵守PE结构.但本质上讲,任意一个.sys...
  • linux内核版本4.9.37

    2018-06-13 17:20:43
    linux内核版本, 海思3559A指定版本 59A使用该内核的方式 打补丁 1)将下载的 linux-4.9.37.tar.gz 存放到 osdrv的opensource/kernel目录中 2)linux服务器中进入 osdrv 的根目录,执行如下命令: cd opensource/...
  • 尝试使用make O = / path / to / mydir这是内核Makefile的文档:# kbuild supports saving output files in a separate directory.# To locate output files in a separate directory two syntaxes are supported.# ...
  • 轻松矿工没有内核If you are a SharePoint user, you must know how tricky it is to perform SharePoint migration. A lot more practice, planning, evaluation, and then execution is needed to make sure that ...
  • Linux内核镜像格式

    2021-05-13 11:43:54
    Linux内核有多种格式的镜像,包括vmlinux、Image、zImage、bzImage、uImage、xipImage、bootpImage等.?kernel镜像格式vmlinux??vmlinux是可引导的、未压缩、可压缩的内核镜像,vm代表VirtualMemory。(表示Linux支持...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 383,606
精华内容 153,442
关键字:

内核存放在哪里