处理并编译内核源代码Linux内核的装备体系由三个部分组成,别离是:1. Makefile:散布在 Linux 内核源代码中的 Makefile,界说 Linux 内核的编译规矩;2. 装备文件(config.in):给用户供给装备挑选的功用;3. 装备东西:包括装备指令解说器(对装备脚本中运用的装备指令进行解说)和装备用户界面(供给依据字符界面、依据 Ncurses 图形界面以及依据 Xwindows 图形界面的用户装备界面,各自对应于 Make config、Make menuconfig 和 make xconfig)。这些装备东西都是运用脚本语言,如 Tcl/TK、Perl 编写的(也包括一些用 C 编写的代码)。本文并不是对装备体系自身进行剖析,而是介绍怎么运用装备体系。所以,除非是装备体系的维护者,一般的内核开发者无须了解它们的原理,只需求知道怎么编写 Makefile 和装备文件就能够。运用补丁假如运用上述脚本,它会主动帮你下载内核源码,假如你觉得版别较低,能够自行下载。我这儿下载的是2.6.22的内核代码,直接去http: //www.kernel.org下载的,一起下载的还有patch-2.6.22,尽管一开端用不上。趁便说一句,其实默许下载的2.6.15.4版别现已足够了,没有特殊情况没有必要独自再下载其他,新版别内核许多特性都是用不上的。假如你下载的内核版别有对应的补丁,就要经过补丁进行对内核源代码的修补操作。一个补丁便是一个文本文档,这个文档包括了在两个不同版其他源代码树之间的改变。补丁是经过diff运用程序来创立的。咱们运用patch程序来运用下载的patch。patch程序读取一个diff(或许patch)文件,然后把文件中描绘的改变内容运用到代码树上。Linux内核中的补丁是相关于保存内核源代码目录的父目录而生成的。这就意味着:patch文件中的文件途径包括了它所依据的内核源文件目录的姓名(或许像是”a/”和”b/”之类的其它姓名)。由于这很或许和你本地机器上的内核源代码目录的姓名不匹配 (可是关于检查一个没有标签的补丁所依据的内核版别对错常有用的)。你应该切换到你的内核源代码目录,并且在打补丁的时分去掉patch中文件姓名途径的第一个重量(patch指令的-p1参数能够完结这个使命)。具体进程是这样的,比方把下载下来的patch紧缩包解压到/patch目录下,解压后的文件名为:xxxx.patch,然后进入你内核源文件的文件夹,将补丁拷贝到这儿,首要运转指令patch -p1 –dry-run /xxxx/patch-xxxx这一步是测验运用patch,此指令不会对你的内核源码做任何更动,假如这一步没有呈现任何过错输出的话,就履行:patch -p1 /xxxx/patch-xxxx假如没有过错提示,就表明补丁现已打上了。修正文件好,此刻的内核源代码,假如是用于台式机的编译,改动就现已足够了。可是咱们是要编译出能在ppc上运转的内核,因而,还要持续进行修正。修正串口代码首要,在XUP板子上有一个串口终端,并且只需一个,这意味着许多流程,包括boot loader,boot process以及接下来的一些进程都要和这个串口交互,假如选用默许的波特率9600,就有点慢了,因而,咱们能够将其波特率修正得大一些。以 38400为例,硬件渠道的修正请在edk下进行,体系源代码的修正,请找到arch/ppc/boot/common/ns16550.c,找到这一行:#define SERIAL_BAUD 9600将其修正成#define SERIAL_BAUD 38400即可。修正xparameters.h在生成bsp的时分会生成xparameters_.h文件,你需求修正源代码目录下arch/ppc/platforms/4xx/xparameters.h文件,让它包括xparameters_.h这个文件。修正makefile接下来咱们来重视一下Makefile,由于 Linux 内核源代码是依照树形结构安排的,所以 Makefile 也被散布在目录树中。Linux 内核中的 Makefile 以及与 Makefile 直接相关的文件有:1. Makefile:顶层 Makefile,是整个内核装备、编译的整体操控文件。bother finally2. .config:内核装备文件,包括由用户挑选的装备选项,用来寄存内核装备后的成果(如 make config)。3. arch/*/Makefile:坐落各种 CPU 体系目录下的 Makefile,如 arch/arm/Makefile,是针对特定渠道的 Makefile。4. 各个子目录下的 Makefile:比方 drivers/Makefile,担任地点子目录下源代码的办理。5. Rules.make:规矩文件,被一切的 Makefile 运用。用户经过 make config 装备后,发生了 .config。顶层 Makefile 读入 .config 中的装备挑选。顶层 Makefile 有两个首要的使命:发生 vmlinux(未紧缩的内核) 文件和内核模块(module)。为了达到此意图,顶层 Makefile 递归的进入到内核的各个子目录中,别离调用坐落这些子目录中的 Makefile。至于究竟进入哪些子目录,取决于内核的装备。在顶层 Makefile 中,有一句:include arch/$(ARCH)/Makefile,包括了特定 CPU 体系结构下的 Makefile,这个 Makefile 中包括了渠道相关的信息。有关Makefile的更多阐明,请拜见IBM文档库文章Linux内核装备体系浅析。小常识:各种内核格局的差异vmlinux是未紧缩的原始内核,为ELF格局,常用于内核调试;vmlinuz,或zImage or bzImage,是vmlinux经过紧缩并包装有gzip自解压代码的内核,为BIN格局,常作为体系或方针板的引导内核。坐落各个子目录下的 Makefile 相同也依据 .config 给出的装备信息,构造出当时装备下需求的源文件列表,并在文件的最终有 include $(TOPDIR)/Rules.make。下面谈谈具体怎么对Makefile进行修正。翻开内核源代码目录下的Makefile文件,找到以下两行:ARCH ?= $(SUBARCH)CROSS_COMPILE ?=这是表明ARCH的值为SUBARCH的值,而CROSS_COMPILE的值为空。咱们应该将其改为:ARCH := ppcCROSS_COMPILE = powerpc-405-linux-gnu-这样表明硬件渠道是ppc,而穿插编译东西是powerpc-405-linux-gnu-系列东西。小常识:ppc仍是powerpc?仔细的朋友或许发现,arch/platforms目录下既有ppc目录又有powerpc目录,这是怎么回事呢?由于IBM 建立 power.org 安排,便以 Power Architecture 来称号 PowerPC 处理器,因而,以往所惯用的PPC 现在都改名叫 PowerPC。也便是说, PowerPC 现在属所以官方称号了。而Linux kernel 由 2.6.15 开端,现已把 arch/ppc/ 重新安排到 arch/powerpc/,不过在整个迁徙的作业完结之前,arch/ppc/ 仍会持续存在,只不过 arch/ppc/ 将会中止开展,接下来的 Linux kernel for PowerPC 将会转移到 arch/powerpc/ 的新目录下持续开展。仔细观察两个文件夹,会发现有少许不同,以往 PPC platform的分类 是被写在 arch/ppc/platforms/*.c 裡,安排结构不大杰出,现在被重新安排在 arch/powerpc/platforms/ 目录下,一个 platform 一个目录,洁净多了:# ls arch/powerpc/platforms/4xx/ 85xx/ apus/ embedded6xx/ maple/ prep/82xx/ 86xx/ cell/ iseries/ pasemi/ pseries/83xx/ 8xx/ chrp/ Makefile powermac/当然,就现在来说,Makefile里边的arch值设置为ppc或许powerpc都无所谓,由于即便你选用了ppc,构建体系的时分也会主动包括asm-powerpc中一切必要的同享包括文件,因而没有必要忧虑这一点。内核装备接下来进行内核装备。笔者引荐运用”make menuconfig”指令,而不是一些文章中引荐的”make xconfig”,由于后者或许发生一些不知道原因的编译过错。menuconfig是一个文本形式、选单驱动的装备界面,而xconfig是依据 Tcl/Tk的X图形装备界面。别的一个常用的是make oldconfig,假如只想在本来内核装备的基础上修正一些小地方,这个指令会省去不少费事,但咱们这儿是要大改,所以也不必这个。关于装备内核的原理与进程,不熟悉的朋友能够拜见这篇文章,这儿就不具体介绍了。趁便提及的是,运转这个指令或许呈现以下过错1 /usr/bin/ld: crt1.o: No such file: No such file or directory这个过错能够经过装置libc6-dev处理2 /usr/bin/ld: cannot find -lncurses这个过错能够经过装置libncurses5-dev处理3 checklist.o: file not recognized: File format not recognized处理方法是用”make mrproper”指令铲除一切旧的Xwindow configuraTIon文件,至于为什么会有这个过错,我没有深入研究,知道的朋友请点拨一下在一开端装备时,主张先生成一个最小的,确保可运转的.config文件,今后再依据自己的需求增加一些特性,并且增加特性的时分必定当心,稍不留意就会让你无法正常编译,或许无法正常运转。别的需求留意的是,一切标有“new”标签的选项都要遵照默许设置,不要修正它。下面这些选项是我所用的最小体系装备,假如你运用的内核版别和我的不同很大,或许需求改动一些config选项,或许假如你运用这个装备呈现问题,请在这儿留言,我会极力帮你剖析。先将清单与大约解说列出如下:General Setup* Prompt for development and/or incomplete drivers(XUP)Local version – append to kernel release* IniTIal RAM disk (initrd) support* System V IPC* Configure standard kernel features —>* Sysctl syscall support ?Processor* 40x Processor Type* Xilinx-ML300 Machine Type* Math emulaTIon* TTYS0 device and default consolePlatform opTIons* High memory support* Default bootloader kernel arguments~“console=ttyS0,38400 root=/dev/xsysace/disc0/part3 rw”Networking* Unix domain sockets* TCP/IP networking* IP: multicasting* IP: kernel level autoconfiguration* IP: DHCP support* IP: TCP syncookie support (disabled per default)Device drivers—Memory Technology Devices (MTD)* Memory Technology Device (MTD) Support* MTD partitioning support* RedBoot partition table parsing* Direct char device access to MTD devices* Caching block device access to MTD devices* RAM/ROM flash chip device drivers* Detect flash chips by Common Flash Interface (CFI) probe* Suport for AMD/Fujitsu flash chips(这个依据你现有芯片来选)Device drivers—Block Devices* Loopback device support* Network block device support* RAM disk support(4096) Default RAM disk size* Xilinx on-chip System ACEDevice drivers—Network Device Support* Network device support* Ethernet(10 or 100Mbit)* PowerPC 4xx on-chip ethernet?Device drivers—Character devices— Serial drivers* 8250/16550 and compatible serial support* Xilinx uartlite serial port support* Support for console on Xilinx uartlite serial portFile systems* Second extended fs support* Kernel automounter version 4 support (also supports v3)* Pseudo filesystems —>* /proc/kcore support* Virtual memory file system support (former shm fs)* Miscellaneous filesystems —>* Journaling Flash File System v2 (JFFS2) support(0) JFFS2 debugging verbosity (0=quiet, 2=noisy)* Network file systems —>* NFS file system support* Provide NFSv3 client support* Root file system on NFS* NFS server support* Provide NFSv3 server support* SMB file system support (to mount Windows shares etc.)* Native Language Support —>* Default NLS Option: “cp437″Kernel hacking* Kernel debugging* Compile the kernel with debug info* Include BDI-2000 user context switcher其实上面的选项不是最小的,假如你在编译的时分遇到某些问题,能够看看出问题的源代码归于哪个部分,只需能去掉就去掉。准则便是先搞定一个能跑的内核,然后再想扩展的工作。挑选完结之后,将之前编译的BSP拷贝到源代码树目录中,掩盖原有文件。转载自:fcni_cn的百度空间
PowerPC渠道Linux的移植(二)
PowerPC平台Linux的移植(二)-处理并编译内核源代码Linux内核的配置系统由三个部分组成,分别是:1. Makefile:分布在 Linux 内核源代码中的 Makefile,定义 Lin
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/179607.html