编译内核的一点点经验
编译在arm板上运行的内核模块
编译在arm板上运行的内核模块前两天被这个事情搞晕了,看视频的时候感觉编译一个内核模块很简单的,就是修改makefile 的两个地方,但是自己一做就出现问题了,因为我是自己自学的,身边没有可以指导的人,所以很多都要靠自己摸索了,我自己编译的时候出现很多警告信息和错误,提示找不到头文件,还有一些看不懂的信息,到处找资料,但是都没有说清楚,看了很久也没看出什么对自己有用的东西,看的头晕,准备放弃了,今天在学习的时候又去看结果看到一篇博文,才焕然大悟,makefile 里面要改的源代码路径是移植到arm 板上的linux 源代码,才突然想起来,我自己改错了,就是要把路径指上你开发板上运行的linux 内核源代码的顶层路径,我是用的通过nfs 启动系统的,是按照国嵌的视频一步步做的,所以我的路径在我的nfs 所在的路径。
这些问题对于一些学了很久的人来说可能很低级,但是对于初学者来说可能碰到后半天搞不好,所以写下来供参考。
下面是我自己找的一个小实验:#include #include MODULE_LICENSE(“GPL”);MODULE_AUTHOR(“David Xie”);MODULE_DESCRIPTION(“Hello World Module”);MODULE_ALIAS(“a simplest module”);static int __init hello_init(){ printk(KERN_EMERG”Hello World!\n”);return 0;}static void __exit hello_exit(){ printk(KERN_EMERG “Goodbye Cruel World!\n”);}module_init(hello_init);module_exit(hello_exit);第一步是编译,首先要做的是设置交叉编译器,修改makefile,打开makefile 文件,如下:ifneq ($(KERNELRELEASE),)obj-m := hello.oelseKDIR := /forlinux/kernel/linux-2.6.28all:make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux-clean:rm -f *.ko *.o *.mod.o *.mod.c *.symversendif 首先需要指定kernel 的源代码路径:我的是KDIR。
linux内核编译教程
linux内核编译教程Linux内核是开源操作系统Linux的核心部分,负责管理计算机的硬件资源和提供系统调用等基本功能。
编译Linux内核是根据自己的需求定制Linux系统的一个重要步骤。
本文将介绍如何编译Linux内核。
首先,要开始编译Linux内核,需要下载最新的内核源代码。
可以在Linux官网的下载页面找到相应的内核版本。
将源代码下载到本地后,解压缩到一个合适的位置。
接下来,需要安装一些必要的依赖包。
不同的Linux发行版可能有不同的依赖包名称,可以通过包管理器进行安装。
例如,对于Debian/Ubuntu系统,可以使用apt-get命令安装依赖包。
常见的依赖包包括gcc编译器、make工具、flex和bison等。
在安装完依赖包之后,进入解压缩后的内核源码目录。
可以通过cd命令切换到该目录。
在目录中可以找到一个名为.config 的文件,这是内核的配置文件。
可以通过复制现有的配置文件或者使用make menuconfig等命令进行配置。
配置完成后,可以开始编译内核了。
在内核源码目录中运行make命令,编译过程可能需要一些时间。
可以使用make命令的参数来设置编译的选项,例如使用-j参数指定并行编译的进程数,加快编译速度。
编译完成后,可以使用make modules_install命令安装内核模块。
然后,使用make install命令安装编译好的内核。
这些命令可能需要root权限才能执行。
安装完成后,需要更新系统的引导程序以启动新编译的内核。
具体的操作步骤可以根据不同的引导程序进行设置。
一般来说,需要编辑/boot/grub/grub.cfg文件,添加新内核的引导项。
最后,重启计算机,选择新编译的内核启动。
如果一切正常,系统将会以新内核启动。
在编译Linux内核的过程中,可能会遇到各种问题。
可以通过查找相关文档、咨询论坛或者向开发者社区寻求帮助来解决问题。
总之,编译Linux内核是一个复杂的过程,但通过理解以上步骤和不断实践,可以逐渐掌握这一技能,并根据自己的需求定制出适合的Linux系统。
编译内核的步骤-电脑资料
编译内核的步骤-电脑资料第一步:在任何一个子目录下 untar 解开新的内核源程序,。
tar xvfz linux-x.x.xx第二步:rm /usr/src/linux这通常是一个符号连接。
第三步:在 /usr/src/ 下建立一个符号连接到你的新内核目录。
ln -s xxx/yyy/xxx/linux.x.x.xx /usr/src/linux第四步:将当前目录变成 /usr/src/linuxcd /usr/src/linux第五步:变成超级用户su第六步:配置内核如果你在 X window 下并且希望有图形界面,你就说:make xconfig如果你不在 X Window 下或不想使用图形界面,你就说:make config逐个回答完问题后稍等片刻,等提示符出现或图形界面消失,系统就配置好了。
第七步:生成新内核,你说:make dep ; make cleanmake zImage注意大小写一定要搞对!第八步:如果你用了模块,你还需要生成和安装模块make modulesmake modules-install第九步:察看你的 /etc/lilo.conf 看用的是那个目录的那个文件作为image,电脑资料《编译内核的步骤》(https://www.)。
例如:image = /boot/vmlinuz将 /usr/src/linux/System.map 复制到 /boot 目录中,将 /usr/src/linux/arch/i386/boot/zImage 复制到 /boot 目录中并改名为 vmlinuz第十步:安装新内核并重新起动。
liloshutdown -r now警告:你应该有备用的起动手段,不然新内核起动不了你哭都没眼泪! :-)编译一次在我的 120 MHz 奔腾 32 MB 主存的机器上要 20 分钟。
更详细的情况请看有关 initrd, lilo 的有关资料。
祝大家好运气!--。
内核和文件系统编译
内核和文件系统编译【实用版】目录1.编译内核2.编译文件系统3.编译过程中的注意事项正文在内核和文件系统的编译过程中,我们需要遵循一定的步骤和技巧,以确保编译的顺利进行。
下面,我们将详细介绍如何编译内核和文件系统,以及在编译过程中需要注意的事项。
一、编译内核1.获取内核源代码:首先,你需要从内核官方网站上下载最新的内核源代码。
通常情况下,我们使用的是 Linux 内核。
2.配置内核:下载源代码后,需要对其进行配置,以满足你的需求。
这个过程可以通过 make menuconfig 或者 make xconfig 等命令完成。
3.编译内核:配置完成后,就可以使用 make 命令编译内核了。
编译完成后,会生成一个新的内核文件。
4.更新内核:将新的内核文件安装到系统中,替换原有的内核。
这一步通常需要重启系统,以使新内核生效。
二、编译文件系统1.选择文件系统:根据你的需求,选择合适的文件系统。
常见的文件系统有 ext3、ext4、xfs 等。
2.配置文件系统:与编译内核类似,需要对文件系统进行配置。
根据文件系统的不同,配置方法也会有所区别。
3.编译文件系统:配置完成后,使用 make 命令编译文件系统。
编译完成后,会生成一个新的文件系统驱动文件。
4.加载文件系统:将新的文件系统驱动文件加载到系统中,使其生效。
这一步同样需要重启系统。
三、编译过程中的注意事项1.环境准备:在编译之前,确保你的系统环境、编译器和相关工具都处于最新版本。
2.编译选项:根据你的需求和硬件环境,选择合适的编译选项。
例如,你可以选择启用或禁用某些硬件支持、优化编译速度等。
3.错误处理:编译过程中可能会遇到错误,需要仔细阅读错误信息,找出问题所在,并进行解决。
4.编译时间:编译内核和文件系统是一个相对耗时的过程,需要耐心等待。
通过以上步骤,你可以顺利地完成内核和文件系统的编译工作。
内核编译的步骤
内核编译的步骤内核编译是指将Linux内核源代码转换为可执行的二进制文件的过程。
本文将介绍内核编译的详细步骤,以帮助读者了解并掌握这一过程。
第一步:获取内核源代码要进行内核编译,首先需要获取Linux内核的源代码。
可以通过官方网站或开源社区下载最新版本的内核源代码,也可以从版本控制系统中获取。
第二步:配置内核在进行内核编译之前,需要对内核进行配置。
配置内核的目的是根据具体需求选择合适的功能和选项。
可以使用make menuconfig、make xconfig或make config等命令进行配置。
第三步:编译内核配置完成后,就可以开始编译内核了。
在终端中切换到内核源代码目录,并执行make命令。
编译过程可能需要一段时间,取决于计算机性能和内核源代码的大小。
第四步:安装内核编译完成后,可以将生成的内核安装到系统中。
可以使用make install命令或手动将编译生成的内核文件复制到/boot目录,并修改引导加载程序的配置文件。
第五步:更新引导加载程序安装完内核后,需要更新引导加载程序,使其能够启动新安装的内核。
可以使用grub2-mkconfig、grub-mkconfig、update-grub 等命令更新引导加载程序的配置文件。
第六步:重启系统完成内核编译和引导加载程序的配置后,需要重启系统以使新内核生效。
在重启过程中,选择新安装的内核并等待系统启动。
第七步:验证新内核系统重启后,可以通过执行uname -r命令来验证新内核是否成功安装。
如果显示的内核版本是刚刚安装的新内核版本,则说明内核编译成功。
第八步:配置内核模块除了编译内核本身,还可以编译和加载内核模块。
内核模块是一种动态加载的代码,可以在运行时添加或删除。
可以使用make modules和make modules_install命令编译和安装内核模块。
第九步:定制内核在掌握了基本的内核编译步骤后,还可以根据具体需求进行内核定制。
可以通过配置内核选项和功能来满足特定的需求,例如优化性能、减小内核体积等。
编译自己的内核—— Debian篇
升级、编译自己的内核——Debian篇首先要介绍一下,通常其它操作系统的内核编译是比较繁琐的。
然而,由于Debian强大的dpkg软件包管理系统,使得内核的升级、编译也变得容易很多。
这篇文章将会一步一步教你如何编译自己的,带有grsecurity的Linux 2.6内核。
Grsecurity是一个Linux的内核补丁,针对Linux内核的某些安全漏洞进行修补以及安全性的增强。
首先用apg-get 自动下载并安装一些必要的软件包,包括编译内核需要的kernel-package和ncurses-dev等。
如果在内核编译、制作过程中,遇到错误提示说某个软件包不存在的话,请同样使用apt-get install 命令进行下载安装。
apt-get install kernel-package ncurses-dev fakeroot wget bzip2 make patchcd /usr/srcwget /pub/linux/kernel/v2.6/linux-2.6.11.7.tar.bz2tar -xjf linux-2.611.7.tar.bz2请到 查看最新的内核版本。
之后,下载grsecurity。
请注意,务必选择与内核版本相应的grsecurity版本。
(grsecurity网站)wget /grsecurity-2.1.5-2.6.11.7-200504111924.patch.gzgunzip grsecurity-2.1.5-2.6.11.7-200504111924.patch.gz执行以下命令将新内核打上grsecurity补丁patch -p0 < ./grsecurity-2.1.5-2.6.11.7-200504111924.patchOK,切换到新内核的目录cd linux-2.6.11.7为了节省时间,请执行以下命令从现有内核中获得配置make oldconfig执行完此条命令后,会根据新老内核的差异情况,询问你一些问题,如果不确定的话请都是用默认(直接按回车)。
内核模块编译总结
Modules在编译的时候会遇到下列问题:1.首先是要加载内核存放的路径,同时,在编译modules之前要先区内核所在的目录下执行make modules_prepare。
2.如果模块在编译过程中出现没有定义的变量(编译过程中显示*.*undefined!)警告时,这样编译出来的ko在最后插入时候将报以下错误(unknown symbol,can’t insert)3.第二个是不同的ko insmod有个先后的顺序,依赖其它模块的ko最后插入,被依赖的模块在最前面插入。
4.最后看一下编译一个模块所用的makefile文件:INCLUDE := $(PWD)/ifneq ($(KERNELRELEASE),)EXTRA_CFLAGS += -I$(INCLUDE)EXTRA_CFLAGS += -march=ba2obj-m += ec_ap.oec_ap-objs := ec_ap.o ec_ap_core.o ec_ap_diag.oelsePWD := $(shell pwd)KDIR := /home/share/Develop/code/linux/kernel/linux-2.6.29all:make -C $(KDIR) M=$(PWD) modules.PHONY clean:make -C $(KDIR) M=$(PWD) clean-rm -f *.o *.ko *.mod.c modules.order Module.symversEndif#KERNELRELEASE是在内核源码的顶层Makefile中定义的一个变量,在第一次读取执行此Makefile 时,#KERNELRELEASE没有被定义,所以make将读取执行else之后的内容。
#obj-m :=ec_ap.o表示编译连接后将生成ec_ap.o模块。
#ec_ap-objs := ec_ap.o ec_ap_core.o ec_ap_diag.o表示ec_ap.o 由ec_ap.o与ec_ap_core.o ec_ap_diag.o连接生成。
编译进内核的两种方法总结
编译进内核的两种方法总结
第一种:直接编译进内核:
根据自己写的代码,此代码在内核中起什么样的作用而确定改写的Kconfig 和Makefile,然后编译内核。
改写时可以根据内核中其他定义的方式而去写自己的代码,然后利用makemenuconfig命令去配置内核。
例子:写一个设备驱动程序,然后找一个合适的目录,如把它驱动程序放在/work/mini2440/linux-2.6.32.2-mini2440/drivers/char目录下,在这个目录下修改kconfig和Makefile。
写的文件名称是zcy.c。
使用makemenuconfig命令
第二种:用模块加入进内核
改写Makefile文件并保存,编译内核模块,命令成功之后,会在当前目录下生成许多文件,其中,生成的.ko文件是我们需要加载的模块。
把终端设在当前目录下,输入命令insmod zcy.ko,输入lsmod,能找到名为zcy的模块,说明模块已经加载,输入dmesg,查看最后一行,会有模块加载时调用的函数输出,输入命令rmmod zcy,卸载模块,然后输入lsmod,已经找不到zcy模块,卸载,输入dmesg命令,查看模块卸载时调用的函数输出。
例:在目录/work/mini2440/drivers-ldd6410下创建一个名为zcy的文件夹,然后在该文件夹里写一个.c的文件和Makefile文件,然后进行编译进内核。
linux 安卓内核编译的方法
linux 安卓内核编译的方法Linux操作系统以其强大的功能和灵活的配置,吸引了越来越多的开发者。
安卓系统作为一款开源的移动设备操作系统,其内核编译对于开发者来说也是必不可少的技能。
本文将向大家介绍如何使用Linux系统进行安卓内核的编译。
一、准备工作1. 确保你的Linux系统已经安装了基本的开发工具,如gcc、make、patch等。
2. 下载安卓内核源码,可以选择从官网或者github获取。
3. 创建一个用于存放编译结果的目录,如/home/user/kernel_build。
二、配置内核1. 打开终端,导航到源码目录。
2. 使用patch工具对内核源码进行修补,确保源码与当前Linux 内核版本兼容。
3. 修改Makefile文件,指定编译选项和目标。
三、编译内核1. 运行make命令进行第一轮编译,生成中间文件。
2. 运行make menuconfig,进入配置界面,对内核选项进行进一步配置。
3. 退出menuconfig,再次运行make命令进行第二轮编译。
4. 等待编译完成,检查是否有错误信息。
四、安装驱动和模块1. 将驱动程序和模块提取出来,放在适当的目录下。
2. 运行make install命令,将驱动和模块安装到内核中。
3. 验证驱动和模块是否成功安装,可以运行一些测试程序来检查。
五、打包和测试1. 将编译后的内核映像打包,可以使用kimage工具或其他适合的打包工具。
2. 将打包后的内核映像刷入模拟器或实际设备中,进行测试。
3. 运行一些应用程序,检查内核是否能够正常工作。
4. 对测试结果进行分析和优化,根据实际需求进行进一步的调整和修改。
总结:安卓内核编译是一项需要一定技能的任务,但通过本文所述的步骤,你可以轻松完成这个过程。
在编译过程中,需要注意一些细节问题,如源码的兼容性、配置选项的选择等。
此外,为了确保编译的成功率,建议在虚拟机中进行操作,以避免对真实系统造成损坏。
linux内核模块编译方法
linux内核模块编译方法Linux内核模块编译方法引言:Linux内核是操作系统的核心,它负责管理计算机硬件和软件资源,提供用户和应用程序间的接口。
内核模块是一种动态加载的代码,可以在不重新启动系统的情况下添加、删除或修改内核的功能。
本文将介绍Linux内核模块的编译方法,帮助读者快速了解并掌握内核模块的开发和编译过程。
一、准备工作在编译内核模块之前,我们需要准备一些必要的工具和环境。
首先,确保你的系统已经安装了开发工具链,包括GCC编译器、make工具和内核头文件。
你可以使用以下命令检查是否安装了这些工具:```$ gcc -v$ make -v```如果输出结果中显示了版本信息,则说明相应的工具已经安装。
如果没有安装,你可以使用包管理器来安装它们。
例如,在Debian 或Ubuntu系统中,可以使用以下命令安装GCC和make:```$ sudo apt-get install gcc$ sudo apt-get install make```还需要安装内核头文件,以便在编译期间使用内核的符号和数据结构。
你可以使用以下命令安装内核头文件:```$ sudo apt-get install linux-headers-$(uname -r)```这将安装与当前正在运行的内核版本对应的头文件。
二、编写内核模块在开始编写内核模块之前,你需要了解一些基本的内核模块开发知识。
内核模块是一段与内核紧密耦合的代码,因此你需要熟悉内核的API和数据结构。
你可以参考内核源代码中的文档或在线资源来学习这些知识。
编写内核模块的过程类似于编写普通的C程序,你可以使用任何文本编辑器来创建一个源文件,以`.c`为扩展名。
在源文件中,你需要包含一些必要的头文件,并实现模块的入口函数。
下面是一个简单的内核模块示例:```c#include <linux/init.h>#include <linux/module.h>static int __init hello_init(void){printk(KERN_INFO "Hello, World!\n");return 0;}static void __exit hello_exit(void){printk(KERN_INFO "Goodbye, World!\n");}module_init(hello_init);module_exit(hello_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("Your Name");MODULE_DESCRIPTION("A simple example Linux module.");```在上述示例中,我们定义了两个函数`hello_init`和`hello_exit`,分别用于模块的初始化和退出。
kernel5.10 编译方法 -回复
kernel5.10 编译方法-回复Kernel 5.10编译方法Kernel是操作系统的核心组件,主要负责处理硬件、资源管理、进程调度等。
编译自己的内核版本可以帮助我们定制化操作系统,增加新功能、修复漏洞、提高系统性能,同时也为学习内核提供了很好的机会。
本文将介绍Kernel 5.10的编译方法,并提供一步一步的指导。
步骤一:准备工作1.1 确认系统要求在编译Kernel之前,要确保你的系统符合以下要求:- Linux发行版,如Ubuntu、Debian等。
- 操作系统处于最新的更新状态,并已安装了必要的开发工具和依赖项,包括GCC、G++、make、libncurses5-dev等。
1.2 下载Kernel源码首先,我们需要从官方网站下载Kernel 5.10的源码。
打开步骤二:配置内核2.1 进入源码目录使用终端进入到刚解压的内核源码目录。
例如,假设你将其解压到/home/user/kernel-5.10目录,你可以使用以下命令进入到该目录:shellcd /home/user/kernel-5.102.2 配置内核在源码目录下,运行以下命令来配置内核:shellmake menuconfig该命令将打开一个文本界面的配置菜单,允许你选择不同的内核配置选项。
在配置菜单中,你可以按照自己的需求修改内核的各种选项。
例如,你可以选择添加新的功能、开启或关闭特定的驱动程序,或者进行其它自定义设置。
通过上下方向键导航菜单,使用空格键选中或取消选项。
按下键盘上的"?"键,可以查看每个选项的详细说明。
完成配置后,保存并退出配置菜单。
此时,你可以选择将内核配置保存为.config文件,以便今后使用。
它将被保存在源码目录下。
当你再次编译内核或者配置新的内核时,可以使用保存的配置进行参考。
你可以使用以下命令保存内核配置:shellcp .config /home/user/kernel-config-5.10步骤三:编译内核3.1 开始编译在源码目录下,运行以下命令编译内核:shellmake -j(nproc)该命令将使用多个CPU核心进行编译工作,加快编译速度。
嵌入式Linux内核编译步骤和经验
嵌入式Linux内核编译步骤和经验5.tar.xz,并且顺利的编译安装成功了,上电重启都OK的。
不过,我使用的.config配置文件,是Fedora 13自带内核的配置文件,即/lib/modules/`uname -r`/build/.configd) 如果你是移植Linux到嵌入式系统,则还要再下载安装交叉编译工具链。
例如,你的目标单板CPU可能是arm或mips等cpu,则安装相应的交叉编译工具链。
安装后,需要将工具链路径添加到PATH环境变量中。
例如,你安装的是arm工具链,那么你在shell中执行类似如下的命令,假如有类似的输出,就说明安装好了。
[root@localhost linux-2.6.33.i686]# arm-linux-gcc --versionarm-linux-gcc (Buildroot 2010.11) 4.3.5Copyright (C) 2008 Free Software Foundation, Inc.This is free software; see the source for copying conditions. There is NOwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.注:arm的工具链,可以从这里下载:回复“ARM”即可查看。
二、设置编译目标在配置或编译内核之前,首先要确定目标CPU架构,以及编译时采用什么工具链。
这是最最基础的信息,首先要确定的。
如果你是为当前使用的PC机编译内核,则无须设置。
否则的话,就要明确设置。
这里以arm为例,来说明。
有两种设置方法():a) 修改Makefile打开内核源码根目录下的Makefile,修改如下两个Makefile变量并保存。
ARCH := armCROSS_COMPILE := arm-linux-注意,这里cross_compile的设置,是假定所用的交叉工具链的gcc程序名称为arm-linux-gcc。
内核编译
Linux内核编译一.为什么进行内核编译,有什么好处内核是操作系统的灵魂,包括内核抽缘和对便什资源(如CPU)的访问,它负责管理内存和磁盘上的文什,负责启动系统并运行程序,负责从网络上接受和发送数据包等等。
总之,内核实际上是抽象的资源操作到具体便什操作细节之间的接口。
有时我们为了实现某些功能,还有实现一些硬件的支持,需要重新编译内核。
linux设计了可装载的内核模块,以此来缩短开发时间、节省内核空间并进行动态配置。
由于采用了模块,linux可以在系统运行时动态地添加、删除模块代码并且所作更改立即生效而无需重新启动系统,例如可以动态加载某种类型的文件系统。
1.自己定制编译的内核运行更快(具有更少的代码)。
2.系统将拥有更多的内存(内核部分将不会被交换到虚拟内存中)。
3.不需要的功能编译进入内核可能会增加被系统攻击者利用的漏洞。
4.将某种功能编译为模块方式会比编译到内核内的方式速度要慢一些。
二.内核有哪些编译模式1.把相应部分编译到内核中(build-in)。
如果编译到内核中,在内核启动时就可以自动支持相应部分的功能,这样的优点是方便、速度快,机器一启动,你就可以使用这部分功能了;缺点是会使内核变得庞大起来,不管你是否需要这部分功能,它都会存在,建议经常使用的部分直接编译到内核中,比如网卡。
2.把该部分编译成模块(module),动态调用。
如果编译成模块,就会生成对应的.o文件,在使用的时候可以动态加载,优点是不会使内核过分庞大,缺点是你得自己来调用这些模块。
三.如何进行内核编译linux内核编译步骤1.配置内核修改相关参数。
在图形界面下,make xconfig;字符界面下,make menuconfig。
在内核配置菜单中正确设置个内核选项,保存退出。
2. 正确设置关联文件make dep根据上一步所选择的选项,建立文件的依赖关系。
3. 编译内核对于大内核(比如需要SCSI支持),make bzImage对于小内核,make zImage4.编译模块make modules编译可加载模块(即内核选项中选择为M的选项),编译时间跟M选项的数量有关。
如何编译内核
内核,是一个操作系统的核心。
它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。
Linux作为一个自由软件,在广大爱好者的支持下,内核版本不断更新。
新的内核修订了旧内核的bug,并增加了许多新的特性。
如果用户想要使用这些新特性,或想根据自己的系统度身定制一个更高效,更稳定的内核,就需要重新编译内核。
本文将以RedHat Linux 6.0(kernel 2.2.5)为操作系统平台,介绍在Linux上进行内核编译的方法。
一、下载新内核的源代码目前,在Internet上提供Linux源代码的站点有很多,读者可以选择一个速度较快的站点下载。
笔者是从站点上下载了Linux的最新开发版内核2.3.14的源代码,全部代码被压缩到一个名叫Linux-2.3.14.tar.gz的文件中。
二、释放内核源代码由于源代码放在一个压缩文件中,因此在配置内核之前,要先将源代码释放到指定的目录下。
首先以root帐号登录,然后进入/usr/src子目录。
如果用户在安装Linux时,安装了内核的源代码,则会发现一个linux-2.2.5的子目录。
该目录下存放着内核2.2.5的源代码。
此外,还会发现一个指向该目录的链接linux。
删除该连接,然后将新内核的源文件拷贝到/usr/src目录中。
(一)、用tar命令释放内核源代码# cd /usr/src# tar zxvf Linux-2.3.14.tar.gz文件释放成功后,在/usr/src目录下会生成一个linux子目录。
其中包含了内核2.3.14的全部源代码。
(二)、将/usr/include/asm、/usr/inlude/linux、/usr/include/scsi链接到/usr/src/linux/include目录下的对应目录中。
# cd /usr/include# rm -Rf asm linux# ln -s /usr/src/linux/include/asm-i386 asm# ln -s /usr/src/linux/include/linux linux# ln -s /usr/src/linux/include/scsi scsi(三)、删除源代码目录中残留的.o文件和其它从属文件。
linux编译内核的方法
linux编译内核的⽅法1、下载需要的内核版本2、上传到操作系统3、解压到/usr/src⽬录下⽐如:3.19内核tar -xvf linux-3.19.tar.xz -C /usr/src4、创建连接cd /usr/srcln -sv /usr/src/linux-3.19 Linux5、进⾏内核设置cd /usr/src/linuxmake menuconfig这步,最好是拷贝⼀个前⾯运⾏的.config⽂件,在这个⽂件上进⾏修改,否则,可能重启起不来。
⽐如下⾯这样:cp /boot/config-3.10.0-123.el7.x86_64 /usr/src/linux/.config6、编译内核make --可能1个⼩时到3个⼩时不等。
make modules_installmake install7、重启。
内容扩展部署内核源代码打开终端,更改⽤户权限为root。
具体做法是在终端输⼊sudo su,然后按提⽰输⼊密码。
判断是否是root⽤户是使⽤whoami 命令,若输出为root则已经切换到root账户。
输⼊mv linux-2.6.36.tar.gz /usr/src,⽬的是把下载的内核源代码⽂件移到/usr/src⽬录。
输⼊cd /usr/src切换到该⽬录下。
输⼊tar zxvf linux-2.6.36.tar.gz,⽬的是解压内核包,⽣成的源代码放在linux-2.6.36⽬录下。
输⼊cd linux-2.6.36,切换到该⽬录下。
输⼊cp /boot/config-,然后按下Tab键,系统会⾃动填上该⽬录下符合条件的⽂件名,然后继续输⼊ .config,⽬的是使⽤在boot⽬录下的原配置⽂件。
到此这篇关于linux编译内核的⽅法的⽂章就介绍到这了,更多相关linux怎么编译内核内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
编译内核步骤详解
编译内核步骤详解开始就是下载最新的内核,我用的FC5,内核已经很新了,是2.6.8,在 下载了一个最新的内核,2.6.20的。
把 kernel下载到随便一个地方,tar:之后把压缩包放到/usr/src/redhat/SOURCES/下面,其实这么也可以这样,把内核解压到 /usr/src/下面就可以了,然后进入/usr/src/就可以发现已经有2.6.20这个文件夹了,编译内核是在这个文件下面进行的。
也就是说你要进入到这个文件夹下面才可以进行之后的操作哦。
整体上分为三步:1、配置内核(就是确定哪些功能要保留在编译好的内核中,哪些功能要从内核中删除),生成一个编译配置文件.config2、编译内核。
3、安装内核。
之后的就是正式的步骤:进入当前的目录/usr/src/redhat/SOURCES/linux-2.6.20清除当前目录下编译设置:步骤1:$make mrproper其实这步可以不要的。
一般还是要一下吧。
该命令确保目录下没有相关的文件和配置,如果已经编译过linux内核,建议使用该命令步骤2:配置内核模块的功能,有几种方式可以进行界面选择:$make config(文本的配置方式,需要用户自己写配置文件)$make menuconfig(文本选单的配置方式,在有字符终端下才能使用)$make xconfig(图形窗口模式的配置方式,必须支持Xwindow下才能使用)$make oldconfig(文本配置方式,在原内核配置的基础修改时使用)这里推荐make xconfig方式,图形窗口的配置比较直观,对应每一项相应的配置时,有三种选择:Y--该模块编译进内核N--该模块不编译进内核M--该模块编译成可加载内核模块内核编译中各项模块功能的选择请参考我的另外一篇文章。
这里我选择的是:menuconfig,进去之后是一个蓝色界面.总共有10多个大的条目,按enter 进入,前面有[ ]的可以直接输入大写的Y/N,Y显示是一个*,而N是默认的选择就是[空白],如果你要选择就按下Y,或者不选N,当然了还有[m].其实条目下面可能还有一个东西就是---->,也是按回车进入设置.好像还有一个X选择的,进入了就晓得拉.这里边很多东东都要注意选啊,这个要求您对硬件,软件,网络有一定的认识,实在不知道就按默认的来吧.免得以后启动不了骂天骂地都没用哦,我可是好多次启动不了,最后才摸出窍门的…这个步骤完成之后,系统会提醒您,next step you should run “make dep”然后, 内核模块文件连接:步骤3:#make dep (一到两分钟)在确定要编译哪些东东之后(make *config),这个要确定依赖性用这条指令就可以完成了,也就不用麻烦您那么忙着搞了,呵呵,这个确定依赖性以后,然后就要清除一些东东了…步骤4:#make clean (少于一分钟)清除一些不必要的文件,那些乱七八糟的东东是可能会导致您在编译过程中出现错误的哦,一定要做哦…步骤5:#make bzImage(15分钟左右)-这个就是生成您的新核心,也就是kernel啦,所有的系统硬件软件交互都靠它了哦..其实可以是make zImage的,但是你要确保您所编译的这个新内核在640K之下,您就可以使用make zImage,如果比640K大,那就要用make bzImage,您要说没编译出来咋知道多大呢?我的看法是建议用bzImage,因为我编译出来的内核一般都是800~900K左右. …我是菜鸟,本帖子也是为我一样的菜鸟所写,所以. ..咱们就默认make bzImage…假如内核现在已经编译好了,当然越小越好哦,这时候系统会有个提示编译后的bzImage放到哪里去了,提示最后几行,已经告诉了您的新编译出的核心位置啊,一般都在这里/usr /src/linux-2.6.20/arch/i386/boot/,这时候您要做的就是把它放到/boot目录底下去哦,不然系统可没法启动的…#cp /usr/src/linux-2.6.20/arch/i386/boot/bzImage /boot/vmlinuz-2.6.20 这里好像可以不手动复制,系统最后也会在boot下面产生一个吧。
内核开发工作总结
内核开发工作总结
内核开发是计算机系统中最核心的部分之一,它负责管理系统的资源、提供对
硬件的抽象和控制、处理中断和系统调用等重要任务。
内核开发工作涉及到对操作系统底层的理解和掌握,需要深厚的技术功底和丰富的经验。
在这篇文章中,我们将总结内核开发工作的一些关键要点和经验教训。
首先,内核开发工作需要对计算机硬件和操作系统的原理有深入的理解。
只有
深刻理解计算机系统的工作原理,才能够设计和实现一个高效稳定的内核。
对于操作系统的原理和设计模式的掌握也是至关重要的,这些知识可以帮助开发人员更好地理解内核的工作机制和设计思想。
其次,内核开发工作需要具备扎实的编程技能和调试能力。
内核开发通常需要
使用C语言进行编程,这是因为C语言可以更好地直接操作硬件和进行系统级编程。
此外,对于调试工具的熟练使用也是必不可少的,只有通过调试工具,开发人员才能够发现内核中的问题并进行及时修复。
另外,内核开发还需要具备良好的团队合作和沟通能力。
内核开发往往是一个
复杂的工程项目,需要多个开发人员协同完成。
良好的团队合作和沟通能力可以帮助团队成员更好地协调工作,提高工作效率和质量。
总的来说,内核开发工作是一项技术含量高、难度大的工作,需要开发人员具
备扎实的技术功底、丰富的经验和良好的团队合作能力。
只有不断学习和积累经验,才能够在内核开发领域取得更好的成绩。
希望通过本文的总结,读者能够更好地了解内核开发工作的要点和经验,为自己在这一领域的发展提供一些参考和帮助。
内核编译
内核添加方法一、直接编译:1、获取需要安装的内核源代码。
如果你只是想给现有的源代码打补丁的话:◆下载主版本的源代码和升级到新版本需要的每一个补丁的源代码。
◆使用c d命令把路径切换到/ u s r / s r c目录。
◆使用l s命令列出目录中的内容清单。
如果其中有一个/ u s r / s r c / li n u x - v e r s i o n - e x t目录已经存在的话,这就是你已经运行的内核源代码。
◆输入“mkdir linux-newversion-ext”命令建立一个新的源代码目录。
◆把你下载的源代码和补丁都拷贝到这个目录中。
◆使用t a r和g u n z i p命令对源代码进行解包操作。
◆每一个补丁都应该分别并按顺序来处理。
使用t a r和g u n z i p命令对第一个补丁进行解包操作。
◆使用p a t c h命令把这个补丁打到源代码中去。
输入“patch -p0 original<patch name”命令。
◆对所有的补丁重复进行第7和第8个步骤2、使用g u n z i p和t a r命令把源代码解包到/ u s r / s r c / l i n u x - v e r s i o n - e x t目录中。
3、使用c d命令把路径切换到这个目录。
4、选择你想使用的内核配置工具程序:• 图形化功能最少,又很乏味的工具是c o n f i g程序。
◆使用config程序如果用户不想考虑系统中的每一个细节的话, c o n f i g内核配置工具程序将是最不具备图形化功能和最耗时间的了。
但是,它确实又会强迫用户考虑每一个细节,因此还在内核配置工具程序中占有一席之地。
请按照下面的方法使用c o n f i g程序:1) 当在内核升级过程中到达需要对其进行设置的时候,输入“ make config”执行c o n f i g◆配置Linux操作系统内核的config工具程序回答该工具程序提出的问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编译内核的一点点经验原作者:RICK最开始听说编译核心时都吓了一跳, 心想LINUX那么可怕, 一上来就是要自已编译核心...后来自己试了一下, 其实也不复杂, 主要是找些文档来看就行了.1.核心的源程序:我现在在用TLC, REDHAT也用过, SLACKWARE也用过. 无论哪一种, 都是把核心源程序放到/usr/src/linux 下, 因为有些别的应用程序在编译时好像也会从这个路径来引用一些头文件之类. 一般来说这个linux 目录都只是个符号连接, 有一点点像WIN下的Shortcut, 而实际上它对应的目录可能是/usr/src/linux- 之类. RedHat的缺省安装好像并不装源程序, 只有些头文件.以现在的2.2.5 核心为例, 我装的时候就是这样(其实什么版本都一样:)cd /usr/srcrm linux# 这个linux只是个符号连接, 删掉它没事的. 可以ls -l 看看, 如果看到这个:# linux -> linux-XXXXX, 就表示它是个连接而已. 原来的源程序在箭头后的目录. tar zxvf XXXXXXX/linux-# 这个包解开后, 新核心的源程序就放在了新建立的linux目录下, 这可是个货真价# 实的目录.mv linux linux-2.2.5ln -s linux-2.2.5 linux# 按照惯例, 还是把目录另命个名, 再重新做个linux的符号连接好了, 现在源程序放好了.2.准备编译:现在要做一些准备工作. 对于新释放出来的核心源程序也没啥好做的, 就打一个: cd /usr/src/linuxmake menuconfig然后就会看到一个很友好的界面(在LINUX下...已经是很友好的了), 大致上有点像WIN 9X安装时的选择安装项目. 这就是在配置核心, 选择哪些内容要, 哪些不要.慢慢道来:Code maturity ......按回车进去后只有一项, 是问是否在后面的选项中列出开发中/或未完成的代码/ 驱动程序. 不管它, 不选它就行了Processor type ......选择CPU类型, 进去后有四项:Processor family: 按回车, 在里面选CPU类型(我不懂为什么把PPro和6x86MX 列在一起);Math emulation: 协处理器仿真, 当然不选(你不会还在用没有FPU的386吧); MTRR: 搞不懂:PP, 不管它, 缺省是不选的;Symmetric......: 如果你富到有两个或以上的CPU并且装在同一块主板上, 就选;Loadable module support:对模块的支持. 模块可是好东西, 网卡声卡的驱动问题很多朋友都在问, 有模块其实很好办. 这里面有三项:Enable loadable .....: 当然要选;Set version.....: 好像是为了使核心可以装入不同版本的模块, 可以不选它;Kernel module.....: 让核心在启动时有自己装入必需模块的能力, 选上吧; General setup:里面东西不少, 我的办法是一项也不改, 用缺省的;Plug and Play........:著名的Plug and "Pray", 嘿嘿. 选上吧;Block devices:选择某些设备驱动, 按缺省的不变就可以了(如果你没有什么过于古旧的设备如IDE卡的话), 不过我是把"CMD640"及"RZ1000"两项去掉, 因为我不认得它们, 它们也不认得我. 还有就是不妨把"Loopback device" 也加上, 做成核心内包含或模块都可以.现场解释:在每一个选项前都有个括号, 但有的是中括号有的是尖括号. 用空格键选择时可以发现, 中括号里要么是空, 要么是"*", 而尖括号里可以是空, "*"和"M". 这表示前者对应的项要么不要, 要么做在核心里; 后者则多一样选择, 可以做成模块.模块: 我的直观理解是, 模块就是像*.SYS那样的驱动程序, 可以在核心启动后加载,能有效减小核心尺寸, 并有更多的灵活性. 关于灵活性, 后面再说.Networking options:主要是有关TCP/IP的设置. 一般机器用缺省的就行了, 别的如果要作防火墙啊路由什么的可以自己选, 我没选过, 不敢乱说:PP;SCSI support:我是没有SCSI设备的, 所以我一项也不选. 你有吗? 不妨把你要的都做成模块, 这样内核会比较小. 像16.8就选了"low-level drivers" 里的"AIC7xxx",因为有一个SCSI 的CDR 光驱, 有时候可能会接上来用;Netword device support:这里就是网卡的设置.进去以后第一项, Netword device support选上先(没网卡? 也选!)ARCnet support:小的不知此为何物, 不选它;Dummy net driver support:哑(或空)网络驱动支持. 照缺省的, M.EQL ........:不懂. 不选.Ethernet (10 or 100Mbit):你是用网卡上网就把它选上吧.3COM cards:如果你用3COM的卡, 选上. 下面会有多的选项, 选择你的卡那一项吧.AMD LANCE .....:Western Digital......:Racal-Interlan......:看起来都像是某种卡, 不管他.Other ISA cards:其他的用ISA网卡的玩家们(尤其是UMC 9008这种XX卡), 选上.别的卡我是没用过, NE2000兼容的卡就选上NE2000/NE1000 support, 最好是选成M. 把网卡驱动做成模块会有利于你装网卡驱动的.如果已经选出了你用的卡, 下面的可以全部不管了. 统统可以不选. 如果不是的话,就照着列出来的项目选. 例如是拨号上网就要把PPP 选上. 下面的这些没有一样我用过, 不敢胡说:PP出来, 然后是Amateur Radio Support, 不选;然后是ISDN...你富到了用ISDN上网?下面是Old CD-ROM drivers, 如果你还在用古老的非IDE或SCSI接口的光驱, 就进去自己选吧.Character devices:基本上可以全都不变. 如果用的是串口鼠标, "Mouse Support(not serial mouse)" 就可以不选了. 有游戏手柄的可以在Joystick support 里选. 一般的模拟手柄(不好下精确的定义, 总之你能用60块钱以下买到的4键6键8键之类都是模拟型的)就选第一项"Classic PC ....". 我用的Creative Cobra里面是没有的. 不过, LINUX下把手柄驱动起来好像也没什么意义...Filesystems:文件系统支持.Quota support:不用选了, 如果你的机器不是像16.8这样做个人主页服务器的话. 如果你要实验如何限制用户使用的硬盘空间, 就选上.Kernel automounter support 可以选上, 虽然我没发现选不选有什么区别.DOS FAT fs support 最好要选上, 如果要在LINUX下读写DOS分区. 下面有三个选项,把"MSDOS fs support" 与"VFAT(Windows-95) fs support"选上就可以了. VFAT 即FAT32.ISO 9660 .....: ISO 9660格式光盘(现在的软件光盘..X版的光盘..都是这个格式)支持, 当然选上.Microsoft Joliet......: 选上以后没发现有什么用.以下的可以统统保持缺省. 如果装了NT或OS/2, 可以选上NTFS ....及OS/2 ....., 都是只读访问.Network File Systems 子项里缺省选上了NFS, 可以不要. SMB可以选上, 用来访问局域网中的WINDOWS共享目录. 如果要访问Netware卷, 就选上"NCP .....".出来以后是Console drivers, 可以不管它.然后是Sound...这一块东西很多, 实在没力气一一写下来. 不过有几个建议:1. 能用OSS驱动还是用OSS驱动, 又方便, 支持的卡也多;2. 如果用OSS驱动, 在SOUND里就不要选任何东西;3. OSS不支持的卡(如ALS007), 才在核心里想办法. 可以参考上面我POST的"ALS007发声经过".4. OSS指Open Sound System, 是4 Front Tech 的商业产品, 在16.8上可以找得到, 但有时间限制. 某高人作了工作将其注册, 大家自己下载了回去研究. 核心里的那个"OSS sound modules(NEW)" 只是OSS的一部分. 我也用过这个来驱动YAMAHA 719卡.Kernel hacking: 不管它啦......好了, 全部设完了, 选EXIT退出来, 问是否保存修改时答YES.然后会有一些提示. 如果看到了有叫你"make dep", 就一定要打"make dep"先.完了后就打make bzImage. 如果提示信息中没有叫你"make dep", 只有叫你"make zImage", "make zdisk" 或"make zlilo" 的, 就直接打make bzImage 就行了.一点说明: make dep 是作一些准备工作, make bzImage 则是开始编译生成核心. 而make bzImage与make zImage的区别在于, 作成bzImage的核心压缩率比zImage高, 核心就更小一些. make zdisk 与make zlilo 是做别的用处的核心的.然后就等吧(有得你等的). 一般从5分钟到半个钟头不等, 看你的机器了. 第一次编译会比较慢. 以后再改了配置后make就会快很多了.等这个完了后一定还要make modules 和make modules_install.make bzImage 完后会显示核心放在什么地方, 一般是/usr/src/linux/arch/i386/boot/下. 把bzImage拷到根下. 然后修改/etc/lilo.conf, 照着原来的image = XXXXX 来加上image = /bzImageroot = /dev/hda1 (这里视你的LINUX安装而定, 照你原有的改)label = linuxread-only把原来的label = linux 改一下, 如label = oldlinux.把image = /bzImage 这一节加在原来的前面, 这样会自动作为缺省的核心. 你也可以在LILO时打linux或oldlinux来启动不同的核心. 关于这一段, 也可以参考俺前面的"ALS007发声经过".最后, 切记切记, 一定要打个lilo来重新生成LILO程序.好了, 重启...。