内核编译器
⑴ 详细介绍linux内核开发工具都有哪些
1、Source Insight
Source Insight是Windows平台下一款流行度极高的源码阅读和编辑工具。不少Linux开发人员还是习惯于在Windows下进行源码编辑,甚至查看和编辑Linux内核源码,依然在Source Insight中完成。
说明:Source Insight是一款版权软件,需要自行解决版权问题。
安装Source Insight软件后,新建一个工程,取名并指定数据存放位置,如图 1.1所示。
图 1.1 新建工程
点击OK按钮,进入工程设置界面,如图 1.2所示。
图 1.2 工程设置
然后添加源码。浏览选中Linux内核源码文件夹后,点击“Add Tree”按钮,将内核源码树的全部文件添加到工程中,如图 1.3所示。
图 1.3 添加内核源码
添加完成,即可在Source Insight中进行源码阅读和编辑了,如图 1.4所示。
图 1.4 在Source Insight中阅读源码
2、Eclipse
Eclipse是一个跨平台IDE,既能运行于Windows平台,也能在Linux下运行。不少习惯于图形界面操作的开发人员,在Linux下则习惯于用Eclipse来查看和编辑Linux源码。
如果仅仅是在Eclipse中查看Linux内核源码,则可以不必事先安装交叉编译器,否则则须事先安装好交叉编译器。
创建内核源码工程。点击FileàNewàProject,开始创建工程,在工程创建界面选择创建C工程,如图 1.5所示。
图 1.5 创建C工程
点击Next,在C Project界面的Project name栏中填写工程名称,去掉“Use default location”的勾,点击Browse将Location设置为Linux内核源码目录,如图 1.6所示。如果不在Eclipse中编译内核,则使用Linux GCC即可,否则请使用安装好的Cross GCC。
图 1.6 导入Linux内核源码
然后点击Finish,完成Linux内核源码导入,在Eclipse中即可进行代码阅读和编辑了,如图 1.7所示。
图 1.7 在Eclipse中浏览内核源码
在Eclipse中进行源码跟踪,只需选择函数、变量或者宏定义后按F3即可。更多的操作可在Navigate中找到。
3、vim+ctags+cscope
Vi/Vim是一个文本编辑器,在Vim中能高效的实现代码编辑。但Vim的功能不仅仅是一个文本编辑器,借助ctags和cscope的配合,Vim能实现堪比图形IDE环境的源码编辑和阅读功能,在某种程度上甚至比图形IDE更方便。
Vi/Vim的安装不再介绍了。如果不是通过远程登录在远程服务器上工作,而是在本地桌面系统操作,还可以用gvim启动Vi编辑器。
Taglist
Taglist是Vim的一个源码浏览插件,可从http://www.vim.org网站获得。下载到压缩包后,在本地解压,然后将解压得到目录中的plugin目录复制到~/.vim目录。如果用户主目录下没有.vim目录,则建立一个这样的目录即可。
Ctags
Ctags是一个用于产生tags文件的软件,可以下载源码进行编译安装,在Ubuntu下,可通过apt-get进行安装:
sudo apt-get install exuberant-ctags
源码阅读和跟踪
进入准备查看的源码所在目录,首先生成tags文件:
ctags -R
执行时间长短取决于源码数量的多少,执行完毕,在当前目录下可看到一个tags文件。源码越多,执行时间越长,产生的tags文件也越大。
注意:如果修改了源码,代码行号发生了变化,需要重新生成tags文件。
(1)查看函数等定义。用Vi/Vim打开一个C文件。若想知道某个函数、变量、结构或者宏定义在什么地方定义,先将光标移动到函数(变量、结构或者宏定义)上,然后按CTRL+]即可。查看后,按CTRL+o可回到原来所在位置。
(2)查看文件函数列表。打开C文件后,在Vi/Vim的命令状态下输入:TlistToggle(Vi/Vim的命令输入支持补全),在Vi/Vim左边就会出现函数列表侧栏,如图 1.8所示。按CTRL+ww(2次w),可在列表和代码查看区间切换。
图 1.8 Vi/Vim的函数列表侧栏
如果在本地桌面,用Gvim打开C文件,使用起来比较接近IDE集成环境。用鼠标双击函数即可跳转到函数定义的地方,CTRL+鼠标右键即可回退到原来所在位置。更多实用特性,还需要在实际操作中体验。
4、LXR
LXR是Linux Cross Referencer的缩写,是一个比较流行的Linux源码查看工具,当然也不仅仅局限于查看Linux源码。LXR的下载地址为:http://lxr.sourceforge.net,参考该网站的安装说明,很容易在本机搭建一个本地LXR用于源码查看。
如果不想搭建本地LXR,可以直接浏览已经搭好的LXR网站,推荐两个网站:一个是开源中国网站提供的Linux源码在线阅读http://lxr.oss.org.cn,另一个是http://lxr.free-electrons.com网站,前者速度较快,但是提供的Linux内核版本较少,后者则提供的版本较多。网站提供了源码阅读、关键字搜索和自由文本搜索功能。两者的网页快照分别如图 1.9和图 1.10所示。
⑵ 操作系统内核和编译器哪个难度更大
整体而言,是同级别的难,但难点各有侧重。
若论算法,编译器更难,而且难不止一个级别。操作系统的算法难度只能算一般水平。
但是操作系统涉及的东西更多,本身结构更复杂,硬件处理也更加复杂。
⑶ 硬件与内核的关系,或者说 硬件与编译器的关系
操作系统主要分为两部分:内核(Kernel),壳(Shell)。
顾名思义,内核主要实现计算机硬件与壳之间的信息传递与沟通,是一个操作系统最核心技术的体现;壳主要负责传递内核与应用程序之间的信息交流,将内核与软件的内外部命令用利用底层语言进行相互转译,实现一个个的操作请求。对于Windows系统来说,内核与壳之间相互联系,就如同一个只会外语的洋老板与中国翻译的位置,是一个管理与被管理的关系;对于Unix与Linux来说,由于将内核与壳完全分离,就如同一个厂商与一个代理商之间的关系,双方互利协作,厂商可以随时取消代理商的代理权来另找代理,而代理同时也可以不需要这个代理权。
WINDOWS操作系统大家应该都不会陌生,这是全球最大的操作系统开发商——Microsoft公司开发的。其服务器操作系统重要版本WINNT 4.0 Server、Win2000/Advanced Server、Win2003/Advanced Server,也支撑起目前市面上应用最多的服务器操作系统——Windows服务器操作系统派应用。
NetWare操作系统对现在一些IT圈里的朋友可能就比较陌生,由于种种原因,它的市场占有率已经非常局限,主要应用在某些特定的行业中。也就是因为此,在很多朋友在划分操作系统派系的时候,去除了NETWARE的代表权。其实,如果80年代前出生的老IT,对于NetWare这个名词就会异常熟悉了,因为在当初各种设备和网络都比较落后的年代,NetWare在局域网应用中占据着绝对的高额市场;而就算是目前,在一些特定行业和事业单位中,NetWare优秀的批处理功能和安全、稳定的系统性能也有很大的生存空间。NetWare目前常用的版本主要有Novell的3.11、3.12、4.10、5.0等中英文版。
Unix操作系统由AT&T公司和SCO公司共同推出,主要支持大型的文件系统服务、数据服务等应用。由于一些出众的服务器厂商生产的高端服务器产品中甚至只支持Unix操作系统,因而在很多人的眼中,Unix甚至成为高端操作系统的代名词。目前市面上流传的主要有SCO SVR、BSD Unix、SUN Solaris、IBM-AIX 。
Linux操作系统是国外几位IT前辈,在Posix和Unix基础上开发出来的,支持多用户、多任务、多线程、多CPU。Linux开放源代码政策,使得基于其平台的开发与使用无须支付任何单位和个人的版权费用,成为后来很多操作系统厂家创业的基石,同时也成为目前国内外很多保密机构服务器操作系统采购的首选。目前国内主流市场中使用的主要有Novell的中文版Suse Linux 9.0、小红帽系列、红旗Linux系列等。
⑷ linux Kbuild详解系列(0) - 内核的编译操作
欢迎进入Linux内核编译操作的探索之旅!此系列博客将详尽阐述Linux内核从编译到安装的全过程,重点介绍Linux的Kbuild系统。Kbuild系统复杂性较高,理解它对于深入Linux内核配置、调试及开发大有裨益。建议阅读本系列前先回顾Makefile知识。
学习Linux内核编译安装机制,能够为后续配置、调试及开发奠定坚实基础。我们从内核编译操作开始,逐步深入。
内核的编译
我们先从下载源码谈起。Linux源码托管在GitHub,通过在搜索栏输入“torvalds/linux”即可找到主线代码。
下载源码后,进入根目录,执行配置步骤。配置为何重要?因为它允许用户选择各种功能模块,如存储、时钟、外设等,灵活裁剪内核大小,满足不同设备需求。
配置
配置通常涉及选择模块,包括平台选择。配置命令在根目录执行,生成的.config文件记录所有配置选项,为编译器提供内核源码编译依据。
架构选择
在嵌入式开发中,通常采用交叉编译,以提高效率。交叉编译在功能强大的PC机上进行,编译成果在目标开发板上运行。架构差异要求对编译器进行适配。
编译内核
编译过程需考虑目标平台与交叉编译器。配置后生成镜像文件vmlinix。镜像根据架构不同,可进一步处理为vmlinuz、Image、zImage、bzImage等。
编译模块
配置阶段将模块分为内核编译与外部模块。内核编译模块直接存在于镜像中,外部模块需加载后使用。
安装
编译后需将内核和模块安装至目标平台。镜像文件根据架构不同而异,通常通过替换或定制系统文件完成安装。模块安装遵循相似流程,可能需复制至特定目录。
总结
内核编译与安装关键步骤包括:
- 配置
- 编译内核与模块
- 安装内核与模块
同时,嵌入式开发中需关注交叉编译。通过此系列,希望您对Linux内核编译过程有更深入的理解与掌握。
⑸ 如何编译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内核编译中出现menuconfig没有配置界面出来的错误,通常是因为缺少必要的库文件导致无法加载curses功能。为解决此问题,首先需要确保系统已安装了curses库。通过运行以下命令进行安装:
sudo apt-get install libncurses5-dev
完成安装后,尝试再次执行make menuconfig命令,内核配置界面应能正常显示。
若在编译Linux内核时遇到yylloc错误,这通常与编译器或相关工具链的版本不兼容有关。yylloc错误多见于使用flex和bison进行解析的项目。为解决此问题,可采取以下步骤:
1. 确保flex和bison的版本与内核编译所需版本匹配。可通过运行以下命令检查flex和bison的版本:
flex --version
bison --version
2. 若版本不匹配,考虑更新或回滚至兼容版本。可以通过apt或包管理器实现版本更新或回滚。
3. 在编译内核前,先确保系统环境变量PATH包含flex和bison的安装路径,以确保编译器能找到所需的工具。
4. 使用正确的编译选项和参数进行内核编译,确保所有依赖项都已正确配置。
通过上述步骤,应能有效解决Linux内核编译过程中遇到的menuconfig配置界面缺失和yylloc错误问题,确保编译过程顺利进行。