当前位置:首页 » 编程软件 » 内核编译的步骤csdn

内核编译的步骤csdn

发布时间: 2023-07-12 00:29:48

linux内核源码如何编译

首先uname -r看一下你当前的linux内核版本

1、linux的源码是在/usr/src这个目录下,此目录有你电脑上各个版本的linux内核源代码,用uname -r命令可以查看你当前使用的是哪套内核,你把你下载的内核源码也保存到这个目录之下。
2、配置内核 make menuconfig,根据你的需要来进行选择,设置完保存之后会在当前目录下生成.config配置文件,以后的编译会根据这个来有选择的编译。
3、编译,依次执行make、make bzImage、make moles、make moles
4、安装,make install
5、.创建系统启动映像,到 /boot 目录下,执行 mkinitramfs -o initrd.img-2.6.36 2.6.36
6、修改启动项,因为你在启动的时候会出现多个内核供你选择,此事要选择你刚编译的那个版本,如果你的电脑没有等待时间,就会进入默认的,默认的那个取决于 /boot/grub/grub.cfg 文件的设置,找到if [ "${linux_gfx_mode}" != "text" ]这行,他的第一个就是你默认启动的那个内核,如果你刚编译的内核是在下面,就把代表这个内核的几行代码移到第一位如:
menuentry 'Ubuntu, with Linux 3.2.0-35-generic' --class ubuntu --class gnu-linux --class gnu --class os {

recordfail
gfxmode $linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set=root 9961c170-2566-41ac-8155-18f231c1bea5
linux/boot/vmlinuz-3.2.0-35-generic root=UUID=9961c170-2566-41ac-8155-18f231c1bea5 ro quiet splash $vt_handoff
initrd/boot/initrd.img-3.2.0-35-generic
}
当然你也可以修改 set default="0"来决定用哪个,看看你的内核在第几位,default就填几,不过我用过这种方法,貌似不好用。

重启过后你编译的内核源码就成功地运行了,如果出现问题,比如鼠标不能用,usb不识别等问题就好好查查你的make menuconfig这一步,改好后就万事ok了。

最后再用uname -r看看你的linux内核版本。是不是你刚下的那个呢!有没有成就感?
打字不易,如满意,望采纳。

㈡ ubuntu下怎么编译linux内核

Ubuntu 系统
1. 准备工作
切换为管理员权限,sudo –i 输入用户密码 进入root 权限
apt-get install build-essential kernel-package libncurses5-dev libqt3-headers
build-essential (基本的编程库(gcc, make 等)
kernel-package (Debian 系统里生成 kernel-image 的一些配置文件和工具)
libncurses5-dev (meke menuconfig 要调用的)
libqt3-headers (make xconfig 要调用的)
2. 下载特定版本的内核源代码
3. 复制源码linux-3.2.12.tar.bz2 到/usr/src 目录,解压缩
命令.假设源码存放在/home 目录下
cp /home/linux-3.2.12.tar.bz2 /usr/src
cd /usr/src
tar xvjf linux-3.2.12.tar.bz2
解压后生成 linux-3.2.12 目录
4. cd linux-3.2.12
接下来配置内核选项
make menuconfig 这一步比较复杂,内核选项很多,可以使用当前内核的配置选项,
但编译内核的时间会比较长,因为装系统的时候使用的配置是适应大多数系统的,非定
制选项。关于内核配置选项怎么定制,网上很多。
5. 把正在使用系统中的内核配置文件/usr/src/linux-headers-2.6.38-13-generic/.config 拷到
/usr/src/linux-3.2.12 目录下
cp /usr/src/ linux-headers-2.6.38-13-generic/.config /usr/src/ linux-3.2.12
执行:
cd /usr/src/ linux-3.2.12
make menuconfig
终端会弹出一个配置界面
注意主菜单最后有两项:
load a kernel configuration…
save a kernel configuration…
先选第一项load ….,意思是,利用当前的内核配置详单来设置将要编译的内核,然后选save 这一项保存,最后退出配置界面
6. 开如编译安装新内核
执行:make mrproper (清除以前曾经编译过的旧文件,如果是第一次编译,可不执行)
执行:make (编译,加-j4,必须加,双核并行编译,速度快很多,不过使用原先配置
选项)
然后:make install
再:make moles (编译模块)
再:make moles_install (安装模块)
最后创建initrd 文件:
mkinitramfs -o /boot/initrd.img-linux-3.2.12
7. make install 以后,系统自动更新了启动项,可以cat /boot/grub/grub.cfg 看下.之前的启动项不能删除,如果编译内核不成功,之前的启动项又不见了,系统也就跪了
8. reboot

㈢ 拿到了linux的内核 应该用什么软件 怎么去编译

1、你可以把linux内核代码放到你的ubuntu或redhat之类的具有linux内核的操作系统里面,然后在你指定的目录里面解压你的内核源码;
2、在主目录里面找到Makefile文件,修改里面的“ARCH = ”和“CROSS_COMPILE”,也就是你的编辑器路径,保存退出;
3、输入make menuconfig配置你的内核参数,保存退出;
4、执行make zImage,你会看见屏幕哗啦哗啦的在运行,这是在生成内核zImage文件;
5、进入你的arch/(cpu型号)/root/里面,你会看到zImage文件,这个就是你要的。
以上是最简单的步骤,若想详细了解,在网络里面搜索“linux内核编译”,会得到一大堆结果,记得一般只看文库或者博客里面的文章,因为质量比较好。

若需帮助,请追问!

㈣ 如何编译linux的x86内核

Gcc编译器, Linux-2.6.29内核

步骤:

(一):清除临时文件,中间文件和配置文件等(刚从网上下载下来的文件这步可省略)。

make clean

删除大多数的由编译生成的文件、但会保留内核的配置文件.config。

make mrproper

删除所有的编译生成的文件,还有内核配置文件,再加上各种备份文件。

make distclean

mrproper删除的文件,加上编辑备份文件和一些补丁文件。

(二)选择参考配置文件

使用正在运行的内核配置文件作为参考配制文件,该配置文件在/boot目录下,使用命令

cp /boot/config-2.6.18-53.el5 .config。

(三)配置内核

配置内核有如下命令:

make config:基于文件模式的交互式配置(也就是一问一答)。

make menuconfig:基于文本模式的菜单式配置(强烈推荐)。

make oldconfig:使用已有的配置文件(.config)但是会询问新增的配置选项。

make xconfig:图形化配置(需要安装图形化系统)。

make menuconfig是最为常用的内核配置方式,使用方法如下:

1、使用方向键在各选项间移动;

2、使用“Enter”键进入下一层选单;每个选项上的高亮字母是键盘快捷方式,使用它可以快速地到达想要设置的选单项。

3、在括号中按“y”将这个项目编译进内核中,按“m”编译为模块,按“n”为不选择(按空格键也可在编译进内核、编译为模块和不编译三者间进行切换),按“h”将显示这个选项的帮助信息,按“Esc”键将返回到上层选单。

内核配置通常在一个已有的配置文件基础上,通过修改得到新的配置文件Linux内核提供了一系列可供参考的内核配置文件,位于Arch/$cpu/configs

注意:要运行make menuconfig的界面需要调整终端的窗口大小,至少为80*19。

(四)编译内核

(1):make zImage

(2):make bzImage

区别:在X86平台,在zImage只能用于小于512Kd的内核(注意是X86平台)

如需获取详细编译信息,可使用:

make zImage V=1

make bzImage V=1

编译好的内核位于arch/<cpu>/boot目录下

(五)编译内核模块

使用命令make moles

内核模块编译的时间比较长,一般需要1~2小时的时间。这些模块源于使用命令make menuconfig启动的菜单型配置界面中选择<m>的项。

(六)安装内核模块

使用命令:make moles_install,完成安装后,编译好的内核模块会从内核源代码目录拷贝至/lib/moles/2.6.29目录下。

(七)制作init ramdisk

使用cd跳动linux-2.6.29/,目录的上层目录,使用命令:mkinitrdinitrd-$version $version(mkinitrd initrd-2.6.29 2.6.29)将上一步中产生的模块目录/lib/moles/2.6.29制作成initrd-2.6.29。

提示:initrd是“initial ramdisk”的缩写,initrd是在实际根文件系统可用之前挂载到系统中的一个初始根文件系统。在桌面或服务器Linux系统中,initrd是一个临时的文件系统。其生命周期很短,只会用作真实文件系统的一个桥梁。在没有存储设备的嵌入式系统中,initrd可以是永久的根文件系统。

Linux的众多发行版之所以使用initrd主要是为了在内核启动之后能够判断哪些硬件驱动需要加载,哪些不需要,文件系统有没有问题等,最终使得根分区能顺利加载。在scsi和sata设备上启动,usb启动盘,无盘服务器等都需要initrd来做判断,这样可以提高Linux内核的通用性。

(八)安装内核

由于Linux系统启动时,会从/boot目录下寻找内核文件与init ramdisk,所以需要将内核和initrd拷贝至/boot目录。使用命令:

cp initrd-2.6.29 /boot

cp linux-2.6.29/arch/x86/boot/bzImage /boot/vmlinuz-2.6.29

(九)修改/etc/grub.conf或者/etc/lilo.conf

为了让grub在启动时能提供一项我们自己制作的linux内核的选项,需要修改grub的配置文件/etc/grub.conf。(添加的代码为title My Linux(2.6.29)以下的)

注意:/etc/grub.conf实际上是/boot/grub/grub.conf的一个链接,因此真正的配置文件存在与/boot/grub目录下。

㈤ 如何编译Linux内核

一、编译环境

ubuntu 5.10,要编译的内核源码版本2.6.12 二、下载并解压源代码 首先从linux内核的官网www.kernel.org把源代码下载下来。为了和后面实验要求符合,我们要下载使用O(1)调度器的源码。因此这里下载了2.6.12版本源码。下载 下linux-2.6.12.tar.bz2,将下载源码放入/usr/src/目录下。如下图所示: 解压该源码: 三、构建编译环境 现在我们得到的只是源代码,只是许许多多的文本文件,要想使这些文件成为可以运行的程序,需要使用编译器进行编译以及链接。编译器有很多,但在里linux下一般都使用gnu的开源编译器套件,这里包括gcc等,现在我们安装基本的编译器套件,如图所示: 四、安装ncurses库 这里使用Ubuntu系统,因为系统自带的ncurses库在支持make menuconfig的时候会出错,所以,依然要安装ncurses库,这里我们从源码安装。首先去ncurses官网http://ftp.gnu.org/pub/gnu/ncurses/ 上下载源码。这里我们下载5.9版本,并通过简单的安装方式.configure 和make、make install方式安装。如下图所示: 五、配置内核 一切准备工作做完,现在我们就可以配置内核了,这里我们使用make menuconfig方式。如下图: 在使用make menuconfig这个命令后,会出现如下的字符界面,我们就可以在这个界面上对内核进行配置。但是如果这不是你第一次配置这个内核,那么请先运行:make mrproper来清除以前的配置,回到默认配置,然后再运行:make menuconfig.
在这里,我们以对cpu支持的配置为例,其余的选项就不一一详述,首先查看本机的cpu类型,如下图:

在这里我们可以看到,我的电脑的cpu是AMD Athlon的,因此我们在cpu选项里面选用AMD,如下图所示:

在这里需要注意的是:
A、 cpu的设置在linux内核编译过程中,不是必需的,即使保持默认的386选项(我们刚才把它改成了AMD),内核也能正常运行,只不过运行慢一些而已。
B、 一般容易出问题的地方在于Device Driver的设置。我在一开始就遇到了在内核编译完,通过grub引导系统过程中报 “ALERT! /dev/sda1 does not exist . Dropping to a shell!”的错误。这是因为硬盘驱动没有配置好而造成的。运行lspci命令,查看到下面这行:

由此确定,需要配置SCSI、PCI-X、Fusion-MPT驱动,需要在响应的驱动选项里将[M]设置为[*],因为硬盘驱动是在系统开机的时候加载,所以不能以模块形式加载。

把这几个驱动内部的选项全部改为[*]:

六、编译内核

对内核的配置完成之后,现在就可以开始编译内核了,只需要一个简单的make命令即可,之后我们就只能慢慢等,直到编译完成,在我的电脑上,大概用了25分钟。下图是运行make后的部分输出。

七、安装内核
编译完成之后,我们需要安装内核,主要分为如下几步:
1)、安装模块

安装模块,对于内核来说,每一个内核版本有自己的模块目录,默认在/lib/moles/内核版本号这个目录下,make moles_install会创建对应的目录,并把对应的模块文件拷贝过去。注意,这一步必须要在编译过内核再做。

2)、拷贝bzImage文件

bzImage文件是内核映像文件,是启动内核所必需的,我们应当把它拷贝到/boot目录下。在这里,我为自己新建了一个目录,我们把它拷贝过去,并且按照一般内核映像文件的命名方式为它改名为vmlinuz-2.6.12。

3)、制作initrd文件
initrd文件命名为initrd.img-2.6.12

4)、修改grub启动项
要能引导起我们的新系统,需要更改grub配置,增加启动选项。ubuntu 5.10的grub版本比较低,配置文件为/boot/grub/menu.lst,高版本的grub可能在/boot/grub/grub.cfg里。在原有启动项基础上,添加我们自己的启动项,并把它设为默认启动项,配置如下:

5)重启
不出意外的话,我们的内核已经正常加载了,运行uname -a,会发现,内核版本已经是2.6.12了。

㈥ linux怎么编译进驱动进内核

一、 驱动程序编译进内核的步骤
在 linux 内核中增加程序需要完成以下三项工作:
1. 将编写的源代码复制到 Linux 内核源代码的相应目录;
2. 在目录的 Kconfig 文件中增加新源代码对应项目的编译配置选项;
3. 在目录的 Makefile 文件中增加对新源代码的编译条目。

bq27501驱动编译到内核中具体步骤如下:
1. 先将驱动代码bq27501文件夹复制到 ti-davinci/drivers/ 目录下。
确定bq27501驱动模块应在内核源代码树中处于何处。
设备驱动程序存放在内核源码树根目录 drivers/ 的子目录下,在其内部,设备驱动文件进一步按照类别,类型等有序地组织起来。
a. 字符设备存在于 drivers/char/ 目录下
b. 块设备存放在 drivers/block/ 目录下
c. USB 设备则存放在 drivers/usb/ 目录下。
注意:
(1) 此处的文件组织规则并非绝对不变,例如: USB 设备也属于字符设备,也可以存放在 drivers/usb/ 目录下。
(2) 在 drivers/char/ 目录下,在该目录下同时存在大量的 C 源代码文件和许多其他目录。所有对于仅仅只有一两个源文件的设备驱动程序,可以直接存放在该目录下,但如果驱动程序包含许多源文件和其他辅助文件,那么可以创建一个新子目录。
(3) bq27501的驱动是属于字符设备驱动类别,虽然驱动相关的文件只有两个,但是为了方面查看,将相关文件放在了bq27501的文件夹中。在drivers/char/目录下增加新的设备过程比较简单,但是在drivers/下直接添加新的设备稍微复杂点。所以下面首先给出在drivers/下添加bq27501驱动的过程,然后再简单说明在drivers/char/目录下添加的过程。

2. 在/bq27501下面新建一个Makefile文件。向里面添加代码:
obj-$(CONFIG_BQ27501)+=bq27501.o
此时,构建系统运行就将会进入 bq27501/ 目录下,并且将bq27501.c 编译为 bq27501.o
3. 在/bq27501下面新建Kconfig文件。添加代码:
menu "bq27501 driver"

config BQ27501
tristate"BQ27501"
default y
---help---
Say 'Y' here, it will be compiled into thekernel; If you choose 'M', it will be compiled into a mole named asbq27501.ko.
endmenu
注意:help中的文字不能加回车符,否则make menuconfig编译的时候会报错。
4. 修改/drivers目录下的Kconfig文件,在endmenu之前添加一条语句‘source drivers/bq27501/Kconfig’ 对于驱动程序,Kconfig 通常和源代码处于同一目录。 若建立了一个新的目录,而且也希望 Kconfig 文件存在于该目录中的话,那么就必须在一个已存在的 Kconfig 文件中将它引入,需要用上面的语句将其挂接在 drivers 目录中的Kconfig 中。

5. 修改/drivers目下Makefile文件,添加‘obj-$(CONFIG_BQ27501) +=bq27501/’。这行编译指令告诉模块构建系统在编译模块时需要进入 bq27501/ 子目录中。此时的驱动程序的编译取决于一个特殊配置 CONFIG_BQ27501 配置选项。

6. 修改arch/arm目录下的Kconfig文件,在menu "Device Drivers……endmenu"直接添加语句
source "drivers/bq27501/Kconfig"

㈦ 三、内核&文件系统编译

一、编译官方提供的内核源码

1、解压官方提供的内核源码包

2、根据官方提供的配置文件对内核进行配置,方式如下
make  ARCH=arm      xxxxx_defult_config
cp   arch/arm/xxxxx_config    .config

3、打开图形界面对内核进行配置,根据需要增加或者删除模块和其他内容

4、对内核进行编译
make  ARCH=arm    CROSS_COMPILE=arm-hisiv300-linux-uclibcgnueabi-    uImage  -j6
或者编辑Makefile文件,对其中的ARCH变量和CROSS_COMPILE变量进行修改,然后执行make uImage

5、在编译编译的时候回出现mkimage命令缺失,这个命令是UBootr提供的,在编译的UBoot路径下面找到这个命令,即可直接使用

6、编译的时候各个方面需要一致性,
                1、编译的内核的交叉编译工具链如果支持硬件浮点数运算那么在配置内核的时候也需要添加硬件浮点数的支持
                        Kernel Features --->
                            [*] Use the ARM EABI to compile the kernel
                2、在编译的内核的时候注意保持不要做太多的修改,否则会出问题

7、编译内核模块
    make  ARCH=arm    CROSS_COMPILE=arm-hisiv300-linux-uclibcgnueabi-    moles  -j6

8、安装内核模块到指定的目录中去
make moles_install ARCH=arm CROSS_COMPILE=arm-hisiv300-linux-uclibcgnueabi- INSTALL_MOD_PATH=/home/fu/hisi/kernel/build

9、不要采用内核模块安装的命令来安装内核,因为内核不需要安装,在arch/arm/boot/uImage就是所需要的内核文件

二、编译官方提供的busybox来构建根文件系统

1、解压需要编译的busybox源码

2、进入源码中对busybox进行配置,主要是配置交叉编译工具链
Busybox Settings --->Build Options ---> 下面有关于busybox是否配置为采用共享库的模式,还有添加交叉编译工具链的前缀

3、配置需要的文件和命令进行添加或者删除

4、然后执行命令make -jn   && make install

5、创建根文件系统需要的其他的文件和目录,在一个空白的目录中首先拷贝busybox/_install下面的bin、sbin、usr目录到空白目录中,在空白目录中创建其余的所需要的目录文件 bin dev etc home lib linuxrc mnt opt proc sbin sys tmp usr var等以上目录

6、接下来在lib目录中复制内核模块,在编译内核的时候模块安装在了指定的地方,直接拷贝过来就行。

6、创建文件系统所需要的其他文件,配置文件(最简单的办法就是直接复制busybox文件下面的example文件夹里面的东西)
1、/etc/inittab     填写或者    一下是最基本的,还有其他的需要填写
# /etc/inittab
::sysinit:/etc/init.d/rcS                    //指定初始化脚本
::askfirst:-/bin/sh                            //指定第一次输入回车后打开的shell
::ctrlaltdel:/sbin/reboot                //指定这三个按键按下后的反应
::shutdown:/bin/umount -a -r        //指定关机是进行的操作

2、/etc/init.d/rcS                //这个就没有详细额硬性规定了,写入需要初始化的东西即可
#!/bin/sh
mount -a

3、/etc/fstab                        //写入mount -a是要自动挂载的文件系统
# device mount-point type options mp fsck order
proc          /proc        proc  defaults        0    0
tmpfs          /tmp        tmpfs  defaults        0    0

7、拷贝需要用到的库文件,在交叉编译工具链下面存放
arm-linux-xxxxxx-gcc/lib
海思的开发板是在和tahet/lib下面,切记。

㈧ linux内核编译和根文件系统制作过程

内核编译:
make
menuconfig配置相应的平台,然后保存退出直接make命令就可以编译了。
文件系统制作:
一般都用busybox开源软件来做,下载,解压,然后make
menuconfig配置你想要的属性,然后保存退出,make就可以了,然后make
install就会在目录下看到__install的目录就是你要的根文件系统目录了。

㈨ 请简述嵌入式linux内核的编译过程

编译及安装简要步骤:
编辑Makefile版本信息

定义内核特性,生成配置文件.config,用于编译:make xconfig

编译内核:make

安装内核:make install

安装模块:make moles_install

具体步骤如下:

内核配置

先定义内核需要什么特性,并进行配置。内核构建系统(The kernel build system)远不是简单用来构建整个内核和模块,想了解更多的高级内核构建选项,你可以查看 Documentation/kbuild 目录内的内核文档。

可用的配置命令和方式:

make menuconfig

命令:make menuconfig

编译内核

编译和安装内核

编译步骤:

$ cd /usr/src/linux2.6

$ make

安装步骤 (logged as

$ make install

$ make moles_install

提升编译速度

多花一些时间在内核配置上,并且只编译那些你硬件需要的模块。这样可以把编译时间缩短为原来的1/30,并且节省数百MB的空间。另外,你还可以并行编译多个文件:

$ make -j <number>

make 可以并行执行多个目标(target)(KEMIN:前提是目标规则间没有交叉依赖项,这个怎么做到的?)

$ make -j 4

即便是在单处理器的工作站上也会很快,读写文件的时间被节省下来了。多线程让CPU保持忙碌。

number大于4不见得有效了,因为上下文切换过多反而降低的工作的速度。

make -j <4*number_of_processors>

内核编译tips

查看完整的 (gcc, ld)命令行: $ make V=1

清理所有的生成文件 (to create patches...): $ make mrproper

部分编译:$ make M=drivers/usb/serial

单独模块编译:$ make drivers/usb/serial/visor.ko

最终生成的文件

vmlinux 原始内核镜像,非压缩的

arch/<arch>/boot/zImage zlib压缩的内核镜像(Default image on arm)

arch/<arch>/boot/bzImage bzip2压缩的内核镜像。通常很小,足够放入一张软盘(Default image on i386)

㈩ linux编译内核步骤

一、准备工作
a) 首先,你要有一台PC(这不废话么^_^),装好了Linux。
b) 安装好GCC(这个指的是host gcc,用于编译生成运行于pc机程序的)、make、ncurses等工具。
c) 下载一份纯净的Linux内核源码包,并解压好。

注意,如果你是为当前PC机编译内核,最好使用相应的Linux发行版的源码包。

不过这应该也不是必须的,因为我在我的Fedora 13上(其自带的内核版本是2.6.33.3),就下载了一个标准的内核linux-2.6.32.65.tar.xz,并且顺利的编译安装成功了,上电重启都OK的。不过,我使用的.config配置文件,是Fedora 13自带内核的配置文件,即/lib/moles/`uname -r`/build/.config

d) 如果你是移植Linux到嵌入式系统,则还要再下载安装交叉编译工具链。

例如,你的目标单板CPU可能是arm或mips等cpu,则安装相应的交叉编译工具链。安装后,需要将工具链路径添加到PATH环境变量中。例如,你安装的是arm工具链,那么你在shell中执行类似如下的命令,假如有类似的输出,就说明安装好了。
[root@localhost linux-2.6.33.i686]# arm-linux-gcc --version
arm-linux-gcc (Buildroot 2010.11) 4.3.5
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for ing conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
注:arm的工具链,可以从这里下载:回复“ARM”即可查看。

二、设置编译目标

在配置或编译内核之前,首先要确定目标CPU架构,以及编译时采用什么工具链。这是最最基础的信息,首先要确定的。
如果你是为当前使用的PC机编译内核,则无须设置。
否则的话,就要明确设置。
这里以arm为例,来说明。
有两种设置方法():

a) 修改Makefile
打开内核源码根目录下的Makefile,修改如下两个Makefile变量并保存。
ARCH := arm
CROSS_COMPILE := arm-linux-

注意,这里cross_compile的设置,是假定所用的交叉工具链的gcc程序名称为arm-linux-gcc。如果实际使用的gcc名称是some-thing-else-gcc,则这里照葫芦画瓢填some-thing-else-即可。总之,要省去名称中最后的gcc那3个字母。

b) 每次执行make命令时,都通过命令行参数传入这些信息。
这其实是通过make工具的命令行参数指定变量的值。
例如
配置内核时时,使用
make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig
编译内核时使用
make ARCH=arm CROSS_COMPILE=arm-linux-

注意,实际上,对于编译PC机内核的情况,虽然用户没有明确设置,但并不是这两项没有配置。因为如果用户没有设置这两项,内核源码顶层Makefile(位于源码根目录下)会通过如下方式生成这两个变量的值。
SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
-e s/arm.*/arm/ -e s/sa110/arm/ \
-e s/s390x/s390/ -e s/parisc64/parisc/ \
-e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
-e s/sh[234].*/sh/ )
ARCH?= $(SUBARCH)
CROSS_COMPILE ?=

经过上面的代码,ARCH变成了PC编译机的arch,即SUBARCH。因此,如果PC机上uname -m输出的是ix86,则ARCH的值就成了i386。

而CROSS_COMPILE的值,如果没配置,则为空字符串。这样一来所使用的工具链程序的名称,就不再有类似arm-linux-这样的前缀,就相当于使用了PC机上的gcc。

最后再多说两句,ARCH的值还需要再进一步做泛化。因为内核源码的arch目录下,不存在i386这个目录,也没有sparc64这样的目录。

因此顶层makefile中又构造了一个SRCARCH变量,通过如下代码,生成他的值。这样一来,SRCARCH变量,才最终匹配到内核源码arch目录中的某一个架构名。

SRCARCH := $(ARCH)

ifeq ($(ARCH),i386)
SRCARCH := x86
endif

ifeq ($(ARCH),x86_64)
SRCARCH := x86
endif

ifeq ($(ARCH),sparc64)
SRCARCH := sparc
endif

ifeq ($(ARCH),sh64)
SRCARCH := sh
endif

三、配置内核

内核的功能那么多,我们需要哪些部分,每个部分编译成什么形式(编进内核还是编成模块),每个部分的工作参数如何,这些都是可以配置的。因此,在开始编译之前,我们需要构建出一份配置清单,放到内核源码根目录下,命名为.config文件,然后根据此.config文件,编译出我们需要的内核。

但是,内核的配置项太多了,一个一个配,太麻烦了。而且,不同的CPU架构,所能配置的配置项集合,是不一样的。例如,某种CPU的某个功能特性要不要支持的配置项,就是与CPU架构有关的配置项。所以,内核提供了一种简单的配置方法。

以arm为例,具体做法如下。

a) 根据我们的目标CPU架构,从内核源码arch/arm/configs目录下,找一个与目标系统最接近的配置文件(例如s3c2410_defconfig),拷贝到内核源码根目录下,命名为.config。

注意,如果你是为当前PC机编译内核,最好拷贝如下文件到内核源码根目录下,做为初始配置文件。这个文件,是PC机当前运行的内核编译时使用的配置文件。
/lib/moles/`uname -r`/build/.config
这里顺便多说两句,PC机内核的配置文件,选择的功能真是多。不编不知道,一编才知道。Linux发行方这样做的目的,可能是想让所发行的Linux能够满足用户的各种需求吧。

b) 执行make menuconfig对此配置做一些需要的修改,退出时选择保存,就将新的配置更新到.config文件中了。

热点内容
多角线算法 发布:2025-02-07 07:08:56 浏览:273
有效提高ftp传输速度 发布:2025-02-07 07:06:47 浏览:702
寒灵之剑脚本 发布:2025-02-07 06:57:12 浏览:119
解压的窗口 发布:2025-02-07 06:44:34 浏览:797
android身份证 发布:2025-02-07 06:36:43 浏览:430
python的库在哪 发布:2025-02-07 06:30:24 浏览:349
带锁的铅笔如何改密码 发布:2025-02-07 06:18:05 浏览:164
ubuntu搭建samba服务器 发布:2025-02-07 05:52:54 浏览:54
小型企业网如何配置可以互通 发布:2025-02-07 05:33:56 浏览:243
09年crv哪个配置好 发布:2025-02-07 05:17:31 浏览:555