DM8168处理器Linux内核编译方法
- 格式:pdf
- 大小:1.19 MB
- 文档页数:9
如何编译Linux内核分类:Unix/Linux 2009-02-22 17:09 48483人阅读评论(15) 收藏举报linux内核linuxnetworkingnetworkfilesystemsterminal内核,是一个操作系统的核心。
它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。
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目录下的对应目录中。
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系统。
DM8168的U-Boot编译Revision HistoryDraft Date Revision No. Description 2016/07/04 V1.0 1.初始版本。
目录1U-Boot说明和安装源码 (3)1.1DM8168的u-boot说明 (3)1.2安装u-boot (3)2u-boot.noxip.bin.spi编译 (4)2.1清理U-Boot (4)2.2配置U-Boot (4)2.3编译U-Boot (4)3u-boot.min.sd编译 (5)3.1清理U-Boot (5)3.2配置U-Boot (5)3.3编译U-Boot (5)4u-boot.bin编译 (6)4.1清理U-Boot (6)4.2配置U-Boot (6)4.3编译U-Boot (7)1 U-Boot说明和安装源码1.1DM8168的u-boot说明DM8168可以通过boot[4-0]模式拨码开关,进行启动方式选择。
每种启动模式也有不同顺序的启动。
这里我们推荐两种模式:(1) spi启动产品模式下,我们推荐使用spi-flash作为引导程序,把u-boot.noxip.bin.spi和uImage,烧写到spi-flash里面,文件系统烧写到nand-flash。
(2) mmc启动在产品调试阶段,一般使用mmc启动,会更加地方便,这时u-boot-min(MLO),u-boot.bin 和uImage都会保存到sd卡的boot分区,文件系统会保存到sd卡的root分区。
u-boot镜像文件说明:u-boot.noxip.bin.spi spi flash启动对应u-boot文件;u-boot.min.sd SPL对应MLO文件,sd启动的第一阶段;u-boot.bin u-boot的第二阶段,sd启动主功能。
u-boot.noxip.bin.spi、MLO(u-boot.min.sd)和u-boot.bin是依赖不同的配置编译生成的,为加以区分,将其分别称为u-boot.noxip.bin.spi、MLO(u-boot.min.sd)和u-boot.bin编译。
新手指南Linux编译内核操作流程[日期:2009-12-07] 来源: 作者:北南南北提要:编译内核主要是通过内核实现某些功能,比如iptables 需要内支持;所有的硬件的支持也是通过内核实现的;本文只是简单的给初学者讲一下编译内核的流程;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++正文++++++++++++++++++++++++++++++++++++++++++++++++++++++++++一、为什么要编译内核;有时我们为了实现某些功能,比如对iptables的防火墙有些需要内核支持;还有实现一些硬件的支持等,这时我们需要重编内核;二、内核源码版本的选择;如果发行版本提供内核源码,最好还是用发行版本提供的;比如Fedora 4.0 提供了很多版本的内核源码;我们安装好后,他自带的配置文件大多能满足我们的需要,对于新手来说,根据自带的内核的配置文件.config ,我们也能学到一点如何配置内核。
也没有什么难的,熟能生巧罢了;如果从 下载最新稳定版本的内核也是可以的;三、内核源码安装或解压;对于Fedora Core 4.0 来说,内核源码是放在/usr/src/kernels 目录中;如果通过在线升级内核,也是放在这个目录中;如果您的系统中的/usr/src/kernels/ 中没有内容,说明您没有安装内核的源码包kernel-devel 软件包;您可以通过软件包管理器来补装,请参考《Fedora/ RedHat软件包管理指南》如果您用Fedora Core 4.0 ,我建议您在保留老内核的基础上,在线下载最新版本的内核kerenl-devel 和对应版本的kernel 或者从 下载,有时可能新的kerenl 已经解决了您所面对的问题,这时就没有必要编译内核了;如果您是通过在线安装的内核源码包,比如通过apt+synaptic 或者yum 安装的,内核源码会被放到/usr/src/kernel 下的目录中,您要进入相对应的目录进行编译;在线更新软件包,请参考《Fedora/ RedHat软件包管理指南》,推荐apt+synaptic 工具;如果您是是下载kernel 和kernel-devel 的rpm 包,可以通过来安装;[root@localhost beinan]# rpm -ivh kernel*.rpm如果您是从 下载的类似linux-2.6.13.tar.bz2 或者linux-2.6.13.tar.gz的,您要把下载下来的文件移到/usr/src 目录中解压;然后进入解压的目录中进行配置和编译;[root@localhost beinan]# mv linux-2.6.13.tar.bz2[root@localhost beinan]# cd /usr/src/[root@localhost src]# tar jxvf linux-2.6.12.3.tar.bz2提示:本文以linux-2.6.12.3为例,其实通过发行版的升级版的kernel-devel 和从 下载下来的差不多,大同小异;不同的是通过在线升级的rpm格式的内核源码包,有配置文件.config 可以参考;安装到的目的地是/usr/src/kernel 对FC 4.0来说;如果您要高编译和配置内核,四、内核的配置;1、进入目录执行make mrproper ,对于从 下载而来的tar.bz格式的源码包;[root@localhost src]# cd linux-2.6.12.3/[root@localhost linux-2.6.12.3]#[root@localhost src]# cd linux-2.6.12.3/[root@localhost linux-2.6.12.3]# make mrproper[root@localhost linux-2.6.12.3]# make menuconfig对于Fedora Core 4.0 ,如果您是通过在线安装的kernel和kernel-devel 新版本的包,比如是2.6.12-1.1398_FC4-i686,你可以直进入/usr/src/kernel/相应的目录中直接执行make menuconfig ;利用发行版本提供的 .config 来配置,这样方便点。
内核升级前的准备工作:Linux系统进行内核升级或定制内核时需要安装GCC编译工具、make编译器,同时变异内核需要root权限。
安装GCC编译环境参考:/rhelinux/248.html操作系统:RHEL 5.5开始安装:按照以下顺序安装所需要的包就可以完成GCC的安装了1. rpm -ivh kernel-headers-2.6.18-194.el5.i386.rpm2. rpm -ivh glibc-headers-2.5-49.i386.rpm3. rpm -ivh glibc-devel-2.5-49.i386.rpm4. rpm -ivh libgomp-4.4.0-6.el5.i386.rpm5. rpm -ivh gcc-4.1.2-48.el5.i386.rpm6. rpm -ivh libstdc++-devel-4.1.2-48.el5.i386.rpm7. rpm -ivh gcc-c++-4.1.2-48.el5.i386.rpm8. rpm -ivh ncurses-5.5-24.20060715.i386.rpm9. rpm -ivh ncurses-devel-5.5-24.20060715.i386.rpm注意:在升级编译完内核,重启后提示如下错误信息:RedHat nash Version 5.1.19.6 startingrver(2.6.33.3)mount: could not find filesystem …/dev/root‟setuproot: moving /dev failed: No such file or directorysetuproot: error mounting /proc: No such file or directorysetuproot: error mounting /sys: No such file or directoryswitchroot: mount failed: No such file or directoryKernel panic – not syncing: Attempted to kill init![Linux-initrd @ 0x1fc37000,0x228585 bytes]于是在网上找了很多,也尝试了很多加模块、重编译了N次、改fstab等方法,都不行。
linux内核编译步骤对于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厂家站点或者下载。
2、清除从前编译内核时残留的.o 文件和不必要的关联cd /usr/src/linuxmake mrproper3、配置内核,修改相关参数,请参考其他资料在图形界面下,make xconfig;字符界面下,make menuconfig在内核配置菜单中正确设置个内核选项,保存退出4、正确设置关联文件make dep5、编译内核对于大内核(比如需要SCSI支持),make bzImage对于小内核,make zImage6、编译模块make modules7、安装模块make modules_install8、使用新内核把/usr/src/linux/arch/i386/boot/目录内新生成的内核文件bzImage/zImage拷贝到/boot目录,然后修改/etc/lilo.conf文件,加一个启动选项,使用新内核bzImage/zImage启动。
格式如下:boot=/dev/hdamap=/boot/mapinstall=/boot/boot.bprompttimeout=50lineardefault=linux-new ### 告诉lilo缺省使用新内核启动linux ###append="mem=256M"image=/boot/vmlinuz-2.2.14-5.0label=linuxread-onlyroot=/dev/hda5image=/boot/bzImage(zImage)label=linux-newread-onlyroot=/dev/hda5保留旧有的启动选项可以保证新内核不能引导的情况,还可以进入linux进行其他操作。
linux内核编译流程Linux内核编译流程一、概述Linux内核是操作系统的核心组件,负责管理计算机的硬件和软件资源,提供各种系统服务。
编译Linux内核是将源代码转换为可执行文件的过程,是定制和优化内核的重要手段。
本文将介绍Linux 内核的编译流程,帮助读者了解内核编译的基本步骤和注意事项。
二、准备工作在编译Linux内核之前,需要进行一些准备工作。
首先,确保系统中已经安装了必要的开发工具,如编译器、链接器等。
其次,获取Linux内核的源代码,可以从官方网站或镜像站点下载最新版本的源代码包。
解压源代码包后,进入源代码目录,即可开始编译。
三、配置内核在进行内核编译之前,需要对内核进行配置。
配置内核的目的是选择需要编译进内核的功能和驱动程序,以及设置相应的参数。
Linux 内核提供了多种配置工具,如make menuconfig、make xconfig 等。
这些工具提供了图形化或文本界面,方便用户进行配置。
通过这些工具,可以选择需要的功能和驱动,也可以设置调试选项和优化参数。
四、编译内核配置完成后,即可开始编译内核。
编译内核的过程是将源代码转换为可执行文件的过程,包括预处理、编译、汇编和链接等步骤。
在Linux内核中,使用make命令进行编译。
make命令会读取Makefile文件,根据其中的规则和依赖关系,自动执行相应的编译命令。
五、安装内核编译完成后,即可安装内核。
安装内核的目的是将编译生成的可执行文件和相关文件复制到系统的相应位置,使系统能够加载和运行新内核。
在Linux内核中,使用make install命令进行安装。
make install命令会将内核文件复制到/boot目录,并更新引导程序的配置文件,以使系统能够启动新内核。
六、配置引导程序安装完成后,需要配置引导程序,使系统能够加载和启动新内核。
引导程序是在计算机启动时运行的程序,负责加载操作系统内核并启动系统。
在Linux系统中,常用的引导程序有GRUB、LILO等。
内核编译的步骤内核编译是指将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命令编译和安装内核模块。
第九步:定制内核在掌握了基本的内核编译步骤后,还可以根据具体需求进行内核定制。
可以通过配置内核选项和功能来满足特定的需求,例如优化性能、减小内核体积等。
DM8168心得之从SD卡启动linux系统/******************************************************************* author: 卢浩* time: 12.03.08* environment: ubuntu10.04LTS +TI DM8186* kernel version: linux-2.6.37******************************************************************/SD卡的在上篇文章里面已经制作好了三分区。
所以这里就可以拿来直接用了我们把MLO,uboot.bin和uImage拷贝到SD里面,这几个文件在uboot的制作里面有介绍,uImage没介绍,这里顺便说以下,基于TI的linux-2.6.37的源代码,用默认配置然后编译生成uImage这里面的boot.noxip.bin 和rd-jffs2.bin是我烧写到nand用文件,这个在用sd卡烧写到nand 里面会用到,到时候再介绍。
然后文件系统这边就直接解压BSP包里面的把解压得到的文件系统拷贝到sd卡的第二分区里面rootfs里面。
设置拨码开关为1110100000,spi和nand的拨码开关要关闭接下来我们插入SD卡。
打开电源,按空格键进入uboot状态我们需要改变一些变量从SD启动Setenv bootcmd 'mmc rescan 0;fatload mmc 0 81000000 uImage;bootm 81000000'setenv bootargs 'console=ttyO2,115200n8 root=/dev/mmcblk0p2 mem=128M rootwait' 然后saveenv 重启,就能够从sd卡完全加载至启动linux系统。
我做的时候还有一些小插曲,请看图从SD卡启动到一半失败了,这个ro表示我的SD卡被锁了。
编译Linux内核实验目的学习重新编译Linux内核,理解、掌握Linux内核和发行版本的区别。
实验内容重新编译内核是一件比你想像的还要简单的事情,它甚至不需要你对内核有任何的了解,只要你具备一些基本的Linux操作系统的知识就可以进行。
本次实验,要求你在RedHat Fedora Core 5的Linux系统里,下载并重新编译其内核源代码(版本号KERNEL-2.6.15-1.2054);然后,配置GNU的启动引导工具grub,成功运行你刚刚编译成功的Linux内核。
实验提示Linux是当今流行的操作系统之一。
由于其源码的开放性,现代操作系统设计的思想和技术能够不断运用于它的新版本中。
因此,读懂并修改Linux内核源代码无疑是学习操作系统设计技术的有效方法。
本实验首先介绍Linux内核的特点、源码结构和重新编译内核的方法,讲述如何通过Linux系统所提供的/proc虚拟文件系统了解操作系统运行状况的方法。
最后,对Linux编程环境中的常用工具也有简单介绍。
1.1查找并且下载一份内核源代码我们知道,Linux受GNU通用公共许可证(GPL)保护,其内核源代码是完全开放的。
现在很多Linux的网站都提供内核代码的下载。
推荐你使用Linux的官方网站: ,如图1-1。
在这里你可以找到所有的内核版本。
图1-1 Linux的官方网站由于作者安装的Fedora Core 5并不附带内核源代码,第一步首先想办法获取合适版本的Linux内核代码。
通过命令# uname –r2.6.15-1.2054_FC5这就是说,RedHat Fedora Core 5采用的内核版本是2.6.15-1.2054_FC5。
但是,官方网站/pub/linux/kernel/找不到对应版本。
请别着急,既然它是RedHat发布的,RedHat的官方网站总有吧。
浏览/pub/fedora/linux/core/5/source/SRPMS,我们发现果然有文件kernel-2.6.15-1.2054_FC5.src.rpm,这个rpm文件就是2.6.15-1.2054_FC5版的内核源代码了。
Linux内核编译方法
RevisionHistory
DraftDate Revision No. Description 2016/07/27 V1.0 1.初始版本。
目录
1 内核编译 (3)
1.1安装内核源代码 (3)
1.2清理内核 (3)
1.3配置内核 (4)
1.4编译内核 (6)
1.5编译模块 (7)
2 自启服务说明(针对启动失败) (8)
1内核编译
当前使用Linux版本为:linux-2.6.37,光盘中路径为"Linux\kernel\linux-xxx\src\linux-2.
6.3
7.tar.gz"。
1.1安装内核源代码
将内核源文件复制到任意目录下,如"/media/data/8168",并解压安装到"/media/dat a/8168/linux-2.6.37"目录下,进入该目录后,执行命令如下:
Host# sudo mkdir -p linux-2.6.37
Host#tar zxvf linux-2.6.37.tar.gz -C linux-2.6.37
图1
图2
1.2清理内核
进入linux-2.6.37内核源码的顶层目录,然后执行以下命令:
Host# sudo make
CROSS_COMPILE=/home/tl/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-linux-g
nueabi- ARCH=arm distclean
图3
make clean、make mrproer、make distclean的区别:
删除的文件范围从小到大依次为:make clean < make mrproper< make distclean。
make clean:删除大多数的编译生成文件,但会保留.config内核配置文件。
make mrproper:删除所有编译生成文件,同时删除内核配置文件以及各种备份文件。
make distclean:删除所有的编译生成文件,同时删除内核配置文件以及各种备份文件和补丁文件,清除最完整。
1.3配置内核
配置内核。
执行如下命令:
Host# sudo make
CROSS_COMPILE=/home/tl/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-linux-gnuea
bi- ARCH=arm ti8168_evm_defconfig
图4
这一步已完成平台所需配置,如用户需添加再其他配置(如无需要可跳过此步),可执行下一步选择配置:
Host# sudo make
CROSS_COMPILE=/home/tl/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-linux-g
nueabi- ARCH=arm menuconfig
图5
图6
1.4编译内核
编译内核镜像。
执行如下命令:
Host# sudo make
CROSS_COMPILE=/home/tl/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-linux-g
nueabi- ARCH=arm uImage -j 8
图7
编译完成如下图所示:
图8
编译完成后在"/media/DM8168/linux-2.6.37/arch/arm/boot"路径下生成uImage文件。
如下图所示:
图9
1.5编译模块
最后执行模块的编译。
执行如下命令:
Host# sudo make
CROSS_COMPILE=/home/tl/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-linux-g
nueabi- ARCH=arm modules -j 8
图10
将系统卡插入pc机,在ubuntu上确认是否挂载了系统卡,将编译的模块安装到系统卡rootfs分区,执行如下命令:
Host# sudo make
CROSS_COMPILE=/home/tl/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-linux-gnueabi- ARCH=arm modules_install INSTALL_MOD_PATH=/media/rootfs
图11
至此编译完成。
但由于编译完成后,驱动中缺少syslink.ko,会导系统的一些驱动无法正常使用,因此还要根据《syslink使用文档》编译和安装syslink.ko驱动,然后将syslink 步骤生成的dsp目录复制到SD卡开发板文件系统/rootfs/lib/modules/2.6.37/kernel/drivers 目录路径。
注意:如需生成制卡工具里面的压缩包可以把modules安装到ubuntu其他目录而非sd卡rootfs,将syslink.ko添加进去,然后再进入安装目录打包成压缩包即可。
2自启服务说明(针对启动失败)
用户自启服务有以下列表
图12
其中S01load-hd-firmware.sh:加载HDVPSS固件,需要内核模块支持,如果没有系统启动时会停在下图位置,无法正常进入系统。
图13
问题:使用自己编译的内核镜像不能启动,原因为以上所述。
解决方法:
1.可以把启动卡放到ubuntu的pc机上
图14
2.进入rootfs目录:
Host# sudo rm /media/teddy/rootfs/etc/rc5.d/S01load-hd-firmware.sh //用户目录删除自启动服务。
3.重新启动开发板系统。