linux加载内核 x5内核加载失败怎么办

本篇文章给大家谈谈linux加载内核,以及x5内核加载失败怎么办对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

linux module命令

linux系统下module命令是什么呢?下面是具体介绍:

1、module命令简介:

modules的字面意思是模块,模块化有两个方法解决:设计者可以把各项功能分离到单独的叫做线程的处理中去,或者是将内核以包含/排除一些功能的方式重新编译。如果把功能分离到线程中去,那么内核就叫做“微内核”(micro-kernel),这种解决方法增加了线程间协调工作的通信开销,这种解决方案的优点在于内核的大小。

Linux的解决方案是包含内核模块,这些模块是可以按需要随时装入和卸下的。这样做可以使得内核的大小和通信量都达到最小。将模块从内核中独立出来,不必预先『绑』在 kernel codes中。

这样做有三种优点:一,将来修改 kernel时,不必全部重新compile,可节省不少时间;二,若需要安装新的 modules,不必重新 compile kernel,只要插入(通过insmode指令)对应的 modules即可;三,减少内核对系统资源的占用,内核可以集中精力做最基本的事情,把一些扩展功能都交由modules实现。

模块也可以用来尝试新的内核代码而不需要每次都创建和重激活内核。但是,这样做带来的问题是:使用内核模块通常会轻微的增加性能和内存开支。一个可加载模块肯定会产生更多的代码,这种代码和额外的数据结构会占用更多一点的内存。另外因为间接访问内核资源也让模块的效率轻微降低。

2、加载模块方法:

加载内核模块的方法有两种。

一是使用insmod命令手工把它插入到内核。

二是在需要的时候加载这个模块,叫做按需加载(demand loading)。当内核发现需要一个模块的时候,例如当用户安装一个不在内核的文件系统的时候,内核会请求内核守护进程(kerneld)试图加载合适的模块。

3、与modules有关的命令:

lsmode:列出已经被内核调入的模块

insmode:将某个module插入到内核中

rmmod:将某个module从内核中卸载

depmod:生成依赖文件,告诉将来的 insmod要从哪儿调入 modules。这个依赖文件就在/lib/modules/[您的kernel版本]/modules.dep。

Kerneld:负责自动的将模块调入内核和把模块从内核中卸载。

举例:

编译一个最小的Linux内核

必须要编译到内核中的内容:

1、root所在的硬盘配置。哪果您的硬盘是IDE接口,就把 ide的选项标记下来。如果是SCSI接口,请把您的接口参数及 SCSI id记标下来。

2、选择使用哪一个文件系统。Linux的默认文件系统是是 ext2,那么就一定要把它标记下来。如果机器中还其它的操作系统,如win98或windows NT,您还会可能选择FAT32或NTFS的支持,不过后面你可以通过手工加载的方式来加入新的模块支持。

3、选择Linux所支持的可执行文件格式。这里有两种格式可供选择:elf:这是当前Linux普遍支持的可执行文件格式,必须编译到内核中。

a.out:这是旧版的Linux的可执行文件各函数库的格式,如果你确认肯定用不到这种格式的可执行文件,那么就可以不把它编译到内核当中。

其它内容凡是所有选项中m提示的,都选择m,这样可以通过手工的方式添加该模块。

** Loadable module support*Enable loadable module support(CONFIG_MODULES) [Y/n/?]Set version

information on all symbols for modules(CONFIG_MODVERSIONS) [N/y/?]Kernel daemon support(e.g.

autoload of modules)(CONFIG_KERNELD) [Y/n/?]

分别回答 Y,N,Y。其中 CONFIG_KERNELD的 default值是 N,所以要注意选择Y。

make config完后,仍旧是 make dep; make clean。接下来要 make zlilo或 make zImage。然后 make modules; make modules_install。完成之后,就编译出一个没有调入多余模块的一个“干净的”内核映像文件了。

Linux 内核启动及文件系统加载过程

Linux内核启动及文件系统加载过程

在u-boot引导Linux内核开始执行bootcmd命令后,Linux内核启动过程便开始。普通Linux内核启动通常分为三个阶段。本文将根据项目中使用的linux-2.6.37源码,详细描述内核启动的全过程。

第一阶段为内核自解压过程。在启动过程中,可以看到内核自解压界面。压缩和解压缩代码位于kernel/arch/arm/boot/compressed目录下。编译后产生head.o、misc.o、piggy.gzip.o、vmlinux、decompress.o等文件。BootLoader将系统引导至内核内存后,调用do_bootm_linux(),若内核未被压缩,直接启动;如被压缩,则进行解压。压缩内核头部包含解压程序,入口文件位于arch/arm/boot/compressed/head.S。

decompress_kernel()函数在misc.c文件中实现,调用proc_decomp_setup()、arch_decomp_setup()进行设置。解压缩过程开始后,打印“Uncompressing Linux...”信息,调用gunzip()解压并放置指定位置。内核解压完成后,返回head.S的583行,启动内核。

第二阶段主要工作包括设置ARM处理器工作模式、启用MMU、设置一级页表等。汇编代码通过查找处理器内核类型和机器码类型调用相应的初始化函数,建立页表,跳转至start_kernel()函数开始内核初始化。处理器类型检测在汇编子函数__lookup_processor_type中完成,机器码类型检测在__lookup_machine_type中。建立页表后,跳转至C程序入口start_kernel()。

第三阶段由start_kernel函数开始,这是所有Linux平台进入系统内核初始化后的入口。它完成与硬件平台相关的初始化工作,调用init进程并等待执行,完成Linux内核启动。

启动init服务并挂载根文件系统

在启动init服务前,需要挂载根文件系统。根文件系统至少包含五大目录。以只读方式挂载,防止内核不稳定时破坏数据或延长开机时间。

挂载根文件系统后,执行init服务。Linux内核依据/etc/inittab文件中设置进行初始化系统环境。init启动后,表示Linux内核成功启动。

在启动init服务时,init会读取/etc/inittab文件,执行rc.sysinit、rc、rc.local等脚本进行系统初始化。rc.sysinit主要功能包括启动udev、设置内核参数、系统时间、启用交换内存、检查并挂载文件系统、初始化硬件设备、管理串行端口、清除过期锁定文件、建立用户接口等。

整个Linux内核启动过程至此完成。

怎样进入linux内核文件目录

1、先是输入账号密码进入centos7。

2、进入系统后,先用pwd命令查看一下当前所在的目录。

3、切换文件目录使用的命令是cd,如图命令cd/就是切换到根目录。

4、在根目录下用ls命令查看该目录下有哪些文件,查看后,用绝对路径的方式进入usr目录中,命令为cd/usr。

5、进入usr目录后,用ls查看一下usr下有什么文件。

6、想用绝对路径进入usr下的local目录,使用cd/usr/local,如果使用cd/local是会报错说找不到该目录的。

阅读剩余
THE END