配置linux内核,linux官网
这篇文章给大家聊聊关于配置linux内核,以及linux官网对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。
linux内核移植是什么意思
Linux内核移植是指将Linux内核移植到一种新的硬件平台上,使其能够在该平台上运行。由于不同平台的硬件架构、处理器架构、输入输出接口等可能存在差异,在移植过程中需要对内核进行相应的修改和优化。目的是让Linux操作系统能够运行在更多不同的硬件平台上,提高Linux操作系统的使用范围和灵活性。
通常情况下,进行Linux内核移植需要进行一系列的工作,包括配置和编译内核、编写启动代码、修改设备驱动程序等。在移植过程中需要考虑如何适配新硬件平台的处理器体系结构、内存管理、设备驱动等。同时,也需要考虑如何与操作系统进行适配,包括操作系统的版权、功能模块以及软件版本等。
Linux内核移植的过程需要掌握一定的专业知识和技能,包括对Linux系统原理和硬件体系结构有一定的理解、熟悉跨平台编程技术、掌握内核编译和配置技能等。同时,还需要具备一定的经验和耐心,并尽可能地选择稳定版本的内核及相关工具,以确保移植过程的成功和稳定性。
linux内核调试(三)内核崩溃日志抓取pstore
深入探索Linux内核调试:内核崩溃日志的pstore捕获技术
在Linux内核的世界里,ARMv8架构的5.14.0-rc5版本引入了pstore,一个强大的内核日志管理工具,它以模块化设计轻松地保存内核日志、console日志和ftrace信息,同时还支持灵活的存储设备扩展。pstore的核心在于其文件系统,它以文件形式呈现重启时的数据,便于查询和操作。
初始化pstore流程中,首先设置压缩算法,如deflate或lzo,接着初始化文件系统,创建一个挂载点,并将文件系统注册到内核中。在实际操作中,当系统挂载pstore文件系统时,会填充超级块并从后台读取数据,确保崩溃日志的完整性。
深入细节:pstore的幕后操作
当处理崩溃日志时,pstore通过一系列关键步骤进行工作。首先是打开后台设备(open(psi)),然后进入一个循环(for(; stop_loop;--stop_loop)),每次迭代中,记录(record)会被初始化(pstore_record_init(record, psi)),可能需要解压缩(decompress_record(record)),并根据记录内容创建文件(pstore_mkfile(root, record))。
在pstore backend的注册流程中,关键在于构造一个包含设备名、缓存、标志、限制以及回调函数的pstore_info结构体。接着,根据配置和分区操作,进行参数校验,最后将前端与后端进行连接(注册流程)。
前端操作:记录的捕获与处理
内核异常时,kmsg_dump函数扮演了重要角色,它遍历dump_list,根据dumper的限制条件(max_reason),执行dump操作。dmesg前端的dump函数中,首先初始化记录((1)初始化record结构),接着读取log并写入,经过压缩(如果启用)((2,3)),然后将记录安全地写入后端设备((4))。
为了充分利用pstore,开发者需要在内核配置中启用((1)启用pstore功能),并在devicetree中为ramoops预留内存((2)devicetree配置)。挂载时,将指向/sys/fs/pstore,即可访问并操作保存的崩溃日志((3,4))。
通过深入了解pstore,开发者可以更好地诊断和修复Linux内核中的问题,确保系统在遇到异常时,日志数据能被有效保存和管理。掌握这一技术,无疑为内核维护者提供了强大的工具。
如何配置linux内核
在做Virtualization这段时间,编译过多次Linux kernel,编译Kernel过程中配置config这一步是相对来说比较复杂的。对编译内核过程中的配置这一步做详细的说明吧,总结一下,多数内容源于网上的多篇文章。
首发在我的博客:
首先,配置时可能出现的选项,对其选择先来个说明吧。
Typically, your choices for each option are shown in the format [Y/m/n/?] The capitalized letter is the default, and can be selected by just pressing the Enter key. The four choices are:
y Build directly into the kernel.
n Leave entirely out of the kernel.
m Build as a module, to be loaded if needed.
? Print a brief descriptive message and repeat the prompt.
y表示是(相应功能将直接编译进内核),m表示模块(相应功能将编译为一个模块,在需要时加载),以及n表示否(相应功能不会包含进内核)。?则(对该配置项)打印出简要的描述信息并重复刚才的选择提示。
其次,我使用的最多的两个配置命令分别是:make muneconfig和make oldconfig
make oldconfig和make config类似,但是它的作用是在现有的内核设置文件基础上建立一个新的设置文件,只会向用户提供有关新内核特性的问题,在新内核升级的过程中,make oldconfig非常有用,用户将现有的配置文件.config复制到新内核的源码中,执行make oldconfig,此时,用户只需要回答那些针对新增特性的问题。
make menuconfig基于终端的一种配置方式,提供了文本模式的图形用户界面,用户可以通过光标移动来浏览所支持的各种特性。使用这用配置方式时,系统中必须安装有ncurese库。
在内核树的根目录中,有一个.config文件,它记录了内核的配置选项,可直接对它进行修改,再运行。在.config文件中,每个配置和选项的值只能为”y”和”m”两者之一,如果不需要这个特性不再支持她,那么可以将对应的选项用”#”注释掉。实际上,如果你手头有合适的.config文件,可以运行make oldconfig直接按.config的内容来配置$ sudo make oldconfig
对内核的配置都是围绕.config来展开的.即便开始.config文件不存在,进行配置后会创造它.
一般来说,内核配置保存于/usr/src/linux-*/.config文件中。在/boot/config-<版本>有其备份。请保留它以备后用。
常见的几种配置方式:
为了完成内核的配置,必须切换到root用户,然后转入内核源码目录(就是你下载新内核的目录):
#cd/usr/src/linux/linux-2.6.38
然后执行下面命令之一:
#make config
#make oldconfig
#make menuconfig
#make gconfig
#make defconfig
#make allyesconfig
#make allmodconfig
1.make config
基于文本的最为传统的也是最为枯草的一种配置方式,但是它可以使用任何情况,这种方式会为每一个内核支持的特性向用户提问,如果用户回答“y”,则把特性编译进内核;回答“m”,则它特性作为模块进行编译;回答“n”,则表示不对该特性提供支持
如果回答每个问题前,必须考虑清楚,如果在配置过程中犯了错误给了错误的回答,就只能按“ctcl+c”强行退出了
2.make oldconfig
make oldconfig和make config类似,但是它的作用是在现有的内核设置文件基础上建立一个新的设置文件,只会向用户提供有关新内核特性的问题,在新内核升级的过程中,make oldconfig非常有用,用户将现有的配置文件.config复制到新内核的源码中,执行make oldconfig,此时,用户只需要回答那些针对新增特性的问题
make silentoldconfig: Like above, but avoids cluttering the screen with questions already answered.和上面oldconfig一样,但在屏幕上不再出现已在.config中配置好的选项。
3.make menuconfig
基于终端的一种配置方式,提供了文本模式的图形用户界面,用户可以通过光标移动来浏览所支持的各种特性。使用这用配置方式时,系统中必须安装有ncurese库,否则会显示“Unable to find the Ncurses libraies”的错误提示
4.make xoncifg
基于X Winodws的一种配置方式,提供了漂亮的配置窗口,不过只有能够在X Server上使用root用户欲行X应用程序时,才能够使用,它依赖于QT,如果系统中没有安装QT库,则会出现“Unable to find the QT installation”的错误提示
5.make gconfig
与make xocnifg类似,不同的是make gconfig依赖于GTK库
6.make defconfig
按照默认的配置文件arch/i386/defconfig对内核进行配置,生成.config可以用作初始化配置,然后再使用make menuconfig进行定制化配置
7.make allyesconfig
尽量多地使用“y”设置内核选项值,生成的配置中包含了全部的内核特性
make allnoconfig:除必须的选项外,其它选项一律不选.(常用于嵌入式系统).
8.make allmodconfig
尽可能多的使用“m”设置内核选项值来生成配置文件
下载好Linux内核源代码后,在源代码的根目录执行
make localyesconfig或者make localmodconfig
然后系统就会根据你的硬件自动生成一个适应你的硬件的.config(内核的配置文件)
make localmodconfig会执行lsmod命令查看当前系统中加载了哪些模块(Modules),并最后将原来的.config中不需要的模块去掉,仅保留前面lsmod出来的这些模块,从而简化了内核的配置过程。
这样做确实方便了很多,但是也有个缺点:该方法仅能使编译出的内核支持当前内核已经加载的模块。因为该方法使用的是lsmod的结果,如果有的模块当前没有加载,那么就不会编到新的内核中。
There’s an additional“make localyesconfig” target, in case you don’t want to use modules and/or initrds.
几条好的建议:
除非您使用初始化ramdisk(initrd),否则绝不要把挂载根文件系统必需的驱动程序(硬件驱动以及文件系统驱动)编译成模块!而如果您确实使用初始化ramdisk,请为ext2FS支持选项选择Y,因为ramdisk使用该文件系统。您还需要initrd支持。
如果您系统中有网卡,将它们的驱动编译成模块。这样,您就能够在/etc/modules.conf中用别名定义哪一块网卡第一,哪一块第二,等等。如果您将驱动程序编译进了内核,它们加载的顺序将取决于当初它们链接进内核的顺序,而这不一定是您想要的。
最后,如果您不清楚某个选项的含义,请阅读其帮助!而如果该帮助信息依然不能解决您的困惑,请保留该选项原来的样子。(在config和oldconfig中可以按?键访问帮助。)
配置最终结束后,请保存您的配置并退出。
参考资料:
编译 Linux2.6内核总结:
编译内核:
内核_.config内核配置及Makefile: