当前位置:首页 >> 信息与通信 >>

Linux内核定制与根文件系统制作(完全)


第7章 内核定制与根文件系统制作

本章重点

? 内核配置选项的含义。 ? 内核移植的基本过程 ? 根文件系统的制作

本章内容

? 7.1 Linux内核移植 ? 7.2 Linux根文件系统的制作

7.1 Linux内核移植
嵌入式Linux是按照嵌入式操

作系统的要求设计的一 种小型操作系统,由一个内核及若干根据需要进行定制的 系统模块组成,其内核很小,通常只有几百KB,非常适合 移植到嵌入式系统中。

? 7.1.1 内核移植的基本概念
内核是一个操作系统的核心。它负责管理系统的进程、 内存、设备驱动程序、文件和网络系统,决定着系统的性 能和稳定性。 所谓移植,顾名思义就是通过适当的修改使之适应新 的硬件体系。 Linux内核移植就是根据实际的硬件系统量身定做一 个更高效、更稳定的内核。

7.1 Linux内核移植
? 7.1.2 内核移植的准备 Linux是一个一体化的内核系统,设备驱动程序可以 完全访问硬件。Linux内的设备驱动程序可以方便地以模 块化的形式设置,并在系统运行期间可直接装载或卸载。 当今Linux是全球移植最广泛的操作系统内核。从掌上电 脑iPaq到巨型计算机IBM S/390,甚至于微软出品的游戏 机XBOX都可以看到Linux内核的踪迹。Linux也是IBM超级 计算机Blue Gene的操作系统。 内核包:linux-2.6.22.5.tar.gz。 官方下载: http://www.kernel.org/pub/linux/kernel/v2.6/linux2.6.22.5.tar.bz2。

7.1 Linux内核移植
BusyBox 是标准 Linux 工具的一个单个可执行实现。BusyBox包 含了一些简单的工具,如cat和echo,还包含了一些更大、更复杂的 工具,如grep、find、mount及telnet。简单地说,BusyBox就好像是 个大工具箱,它集成压缩了 Linux 的许多工具和命令。 BusyBox包:busybox-1.1.0.tar.bz2。 官方下载:http://www.busybox.net/downloads/busybox1.1.0.tar.bz2。 注意:若未安装交叉编译器,则还需先安装交叉编译器。下面所采 用的交叉编译器是handhelds.org制作的arm-linux-gcc-3.4.1。 下载地址:ftp://ftp.handhelds.org/projects/toolchain/armlinux-gcc-3.4.1.tar.bz2。 安装方法:tar xjvf arm-linux-gcc-3.4.1.tar.bz2 -C /。 安装后的路径:/usr/local/arm/3.4.1/。

7.1 Linux内核移植
? 7.1.3 内核移植的基本过程
1)下载内核,解压到相应的目录。 2)修改Makefile文件,设置架构类型及使用的编译器。 3)配置内核,通常是尽量裁减内核。 4)生成新内核。 移植流程如图7.1所示。

7.1 Linux内核移植
? 7.1.4 内核移植的具体操作
步骤1:复制linux-2.6.22.5内核压缩包到embedded目录中,并解压缩。 [root@localhost embedded]# tar xjvf linux-2.6.22.5.tar.bz2 步骤2:进入linux-2.6.22.5目录中。 [root@localhost embedded]# cd linux-2.6.22.5/ 步骤3:修改Makefile文件。 [root@localhost linux-2.6.22.5]# vi Makefile #ARCH ?= $(SUBARCH) #注释该行 #CROSS_COMPILE ?= #注释该行 ARCH ?= arm #添加该行 CROSS_COMPILE ?= /usr/local/arm/3.4.1/bin/arm-linux#添加该行

7.1 Linux内核移植
步骤4:执行 make menuconfig 配置内核。 [root@localhost linux-2.6.22.5]# make menuconfig
注意:可以尝试使用命令make xconfig,配置会更方便,通常有以下4种主要 的内核配置方法。 1.make config 命令行方式,配置相对繁琐。 2.make oldconfig 使用一个已有的.config配置文件,提示行会提示之前没有配置过的选项,相 对较简单。 3.make menuconfig 基于文本图形化终端配置菜单,是目前使用最广泛的配置内核方法。 4.make xconfig 基于x窗口的配置菜单,用户可以通过图形界面和鼠标进行配置。

7.1 Linux内核移植
修改以下相关内容,要注意选的是 [*] 还是 [M] 之类。 General setup ---> [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support System Type ---> ARM system type (ARM Ltd. Versatile family) ---> (X) ARM Ltd. Versatile family 改成 (X) Samsung S3C2410, S3C2412, S3C2413, S3C2440, S3C2442, S3C2443

7.1 Linux内核移植
ARM system type (Samsung S3C2410, S3C2412, S3C2413, S3C2440, S3C2442, S3C2443) ---> [ ] S3C2410 DMA support (NEW) 改成 [*] S3C2410 DMA support S3C2410 Machines ---> [ ] SMDK2410/A9M2410 (NEW) 改成 [*] SMDK2410/A9M2410

7.1 Linux内核移植
Boot options ---> () Default kernel command string 改成 (console=ttySAC0 root=/dev/ram init=/linuxrc) Default kernel command string Device Drivers ---> Character devices ---> Serial drivers ---> < > Samsung S3C2410/S3C2440/S3C2442/S3C2412 Serial port support (NEW) 改成 <*> Samsung S3C2410/S3C2440/S3C2442/S3C2412 Serial port support [*] Support for console on S3C2410 serial port LED devices ---> [ ] LED Support (NEW) 改成 [*] LED Support

7.1 Linux内核移植
<M> LED Class Support < > LED Support for Samsung S3C24XX GPIO LEDs (NEW) 改成 <M> LED Support for Samsung S3C24XX GPIO LEDs [ ] LED Trigger support (NEW) 改成 [*] LED Trigger support <M> LED Timer Trigger <M> LED Heartbeat Trigger Multimedia devices ---> <M> Video For Linux 改成 < > Video For Linux [*] DAB adapters (NEW) 改成 [ ] DAB adapters

7.1 Linux内核移植
Graphics support ---> < > S3C2410 LCD framebuffer support (NEW) 改成 <M> S3C2410 LCD framebuffer support Console display driver support ---> [*] VGA text console (NEW) 改成 [ ] VGA text console < > Framebuffer Console support (NEW) 改成 <M> Framebuffer Console support [*] Framebuffer Console Rotation [*] Select compiled-in fonts [*] VGA 8x16 font [*] Mini 4x6 font [ ] Bootup logo (NEW) ---> 改成 [*] Bootup logo --->

7.1 Linux内核移植
上述修改是必须的,下面的修改是根据需要进行的。 Code maturity level options ---> [*] Prompt for development and/or incomplete code/drivers 改成 [ ] Prompt for development and/or incomplete code/drivers Floating point emulation ---> [ ] NWFPE math emulation (NEW) 改成 [*] NWFPE math emulation [*] Support extended precision Device Drivers ---> < > Memory Technology Device (MTD) support ---> 改成 <M> Memory Technology Device (MTD) support ---> [ ] MTD partitioning support (NEW) 改成 [*] MTD partitioning support

7.1 Linux内核移植
RAM/ROM/Flash chip drivers ---> < > Detect flash chips by Common Flash Interface (CFI) probe (NEW) 改成 <M> Detect flash chips by Common Flash Interface (CFI) probe < > Support for Intel/Sharp flash chips (NEW) 改成 <M> Support for Intel/Sharp flash chips < > Support for RAM chips in bus mapping (NEW) 改成 <M> Support for RAM chips in bus mapping

7.1 Linux内核移植
< > Support for ROM chips in bus mapping (NEW) 改成 <M> Support for ROM chips in bus mapping Mapping drivers for chip access ---> < > Map driver for platform device RAM (mtd-ram) (NEW) 改成 <M> Map driver for platform device RAM (mtd-ram) Self-contained MTD device drivers ---> < > Physical system RAM (NEW) 改成 <M> Physical system RAM < > MTD using block device (NEW) 改成 <M> MTD using block device

7.1 Linux内核移植
Parallel port support ---> <M> Parallel port support 改成 < > Parallel port support SCSI device support ---> <M> SCSI device support 改成 < > SCSI device support Multi-device support (RAID and LVM) ---> [*] Multiple devices driver support (RAID and LVM) 改成 [ ] Multiple devices driver support (RAID and LVM) ISDN subsystem ---> <M> ISDN support 改成 < > ISDN support

7.1 Linux内核移植
Input device support ---> <M> Joystick interface 改成 < > Joystick interface < > Touchscreen interface (NEW) 改成 <M> Touchscreen interface (320) Horizontal screen resolution (240) Vertical screen resolution [ ] Touchscreens (NEW) ---> 改成 [ ] Touchscreens ---> < > Philips UCB1400 touchscreen (NEW) 改成 <M> Philips UCB1400 touchscreen

7.1 Linux内核移植
File systems ---> Miscellaneous filesystems ---> < > Journalling Flash File System v2 (JFFS2) support (NEW) 改成 <M> Journalling Flash File System v2 (JFFS2) support [*] Advanced compression options for JFFS2 内核移植关键的步骤就在于配置哪些选项是必须选择,哪些选项 是不用选的。实际上在配置时,大部分选项可以使用其默认值,只有 少部分要根据用户不同的需要选择。选择的原则是,将与内核其他部 分关系较远且不经常使用的部分功能代码编译成可加载模块,有利于 减小内核的大小、减小内核消耗的内存、简化该功能相应的环境改变 时对内核的影响。不需要的功能就不选,与内核关系紧密而且经常使 用的部分功能代码直接编译到内核中。

7.1 Linux内核移植
步骤5:执行make dep命令检查依赖关系。 [root@localhost kernel]# make dep 步骤6:生成zImage内核镜像文件。 [root@localhost kernel]# make zImage
注意: 1.make dep命令应用在内核2.4或之前,在2.6内核中已取消该命 令。 2.make clean命令删除前面留下的中间文件,该命令不会删除 .config等配置文件。 3.make zImage命令编译生成gzip压缩形成的image文件。 4.make bzImage命令编译生成较大的内核文件。 5.生成的zImage文件在arch/arm/boot/目录中。

7.1 Linux内核移植
步骤7:将zImage文件复制到/tftpboot目录中。 [root@localhost kernel]# cp arch/arm/boot/zImage /tftpboot/ 步骤8:测试生成的新内核能否启动。 在另一终端中打开minicom,复位开发板,进入PPCBoot的命 令行界面,执行下面两行语句: SMDK2410 #setenv bootargs console=ttySAC0 initrd=0x30800000, 0x00440000 root=/dev/ram init=/linuxrc SMDK2410 #tftp 0x30008000 zImage; go 0x30008000
注意:这里测试没有使用ramdisk文件系统,原因是前面移植的文 件系统不能在这个内核下使用,需要移植更高版本的busybox才能 使用。

7.1 Linux内核移植
出现以下信息,就表明内核能够运行在开发板上了。 Uncompressing Linux........... done, booting t.Linux version 2.6.22.5 (root@localhost.localdomain) (arm-linux-gcc version 3.4.1) #7 Sun Sep 2 14:24:43 CST 2007 CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177 Machine: SMDK2410 ATAG_INITRD is deprecated; please update your bootloader. Memory policy: ECC disabled, Data cache writeback CPU S3C2410 (id 0x32410000) S3C2410: core 202.800 MHz, memory 101.400 MHz, peripheral 50.700 MHz S3C24XX Clocks, (c) 2004 Simtec Electronics 当然,对于实际的应用中的内核移植,需要根据实际需要,对某 些选项进行裁剪,以使生成的内核文件尽可能小。当裁剪好的内核满 足应用需要后,就可以烧写到目标板上了。 以前做过非常多次都没问题的,但这次做内核是运行了,但这些 输出信息就是没有。

7.2 Linux根文件系统的制作
根文件系统就是要包括Linux启动时所必需的目录和 关键性的文件。例如,在Linux启动时都需要有init目录 下的相关文件,在Linux挂载分区时,Linux一定会找 /etc/fstab这个挂载文件等,根文件系统中还包括许多应 用程序bin目录等,任何包括这些Linux系统启动所必需的 文件都可以成为根文件系统。

7.2 Linux根文件系统的制作
? 7.2.1 根文件系统概述
1.常见的根文件系统 Linux支持多种文件系统类型,为了对各类文件系统 进行统一管理,Linux引入了虚拟文件系统(virtual file system,VFS),为各类文件系统提供一个统一的操 作界面和应用编程接口,如图7.2Linux虚拟文件系统所示。

7.2 Linux根文件系统的制作
Linux启动时,第一个必须挂载的是根文件系统;若 系统不能从指定设备上挂载根文件系统,则系统会出错而 退出启动。之后可以自动或手动挂载其他文件系统。因此, 一个系统中可以同时存在不同的文件系统。 不同的文件系统类型有不同的特点,因而根据存储设 备的硬件特性、系统需求等有不同的应用场合。在嵌入式 Linux应用中,主要的存储设备为RAM(DRAM、SDRAM)和 ROM(常采用Flash存储器),常用的基于存储设备的文件 系统类型包括JFFS2、YAFFS、CRAMFS、ROMFS、RAMDISK、 RAMFS/TMPFS等。 2.根文件系统的目录结构
– “/”根目录部分有以下子目录: – /usr 目录包含所有的命令、程序库、文档和其他文件。这些文件 在正常操作中是不会被改变的。这个目录也包含Linux发行版本的 主要应用程序,譬如Netscape。

7.2 Linux根文件系统的制作
– /var 目录包含在正常操作中被改变的文件:假脱机文件、记录文 件、加锁文件、临时文件和页格式化文件等。 – /home 目录包含用户的文件:参数设置文件、个性化文件、文档、 数据、E-mail、缓存数据等。这个目录在系统升级时应该保留。 – /proc 目录整个包含虚幻的文件。它们实际上并不存储在磁盘上, 也不占用任何空间(用ls –l 可以显示它们的大小)。当查看这些 文件时,实际上是在访问存储在内存中的信息,这些信息用于访 问系统 – /bin 系统启动时需要的执行文件(二进制),这些文件可以被普 通用户使用。 – /sbin 系统执行文件(二进制),这些文件不打算被普通用户使用 (普通用户仍然可以使用它们,但要指定目录)。 – /etc 操作系统的配置文件目录。 – /root 系统管理员(也叫超级用户或根用户)的Home目录。

7.2 Linux根文件系统的制作
– /dev 设备文件目录。Linux下设备被当成文件,这样一 来硬件被抽象化,便于读/写、网络共享以及需要临时 装载到文件系统中。正常情况下,设备会有一个独立 的子目录。这些设备的内容会出现在独立的子目录下。 – /lib 根文件系统目录下程序和核心模块的共享库。 – /boot 用于自举加载程序(LILO或GRUB)的文件。当 计算机启动时(如果有多个操作系统,有可能允许选 择启动哪一个操作系统),这些文件首先被装载。 – /opt 可选的应用程序。 – /tmp 临时文件。该目录会被自动清理干净。 – /lost+found 在文件系统修复时恢复的文件。

7.2 Linux根文件系统的制作
? 7.2.2 建立根文件系统
1.根文件系统的建立流程 根文件系统建立流程如图7.3根文件系统建立流程所示。

7.2 Linux根文件系统的制作
2.根文件系统建立的具体操作
根文件系统建立操作步骤如下。 步骤1:在embedded目录中创建ramdisk的文件系统映像文件。 [root@localhost embedded]# dd if=/dev/zero of=myramdisk bs=1k count=8000 dd命令的作用是用指定大小的块复制一个文件,并在复制的同时进行指 定的转换,if=/dev/zero指输入文件是/dev/zero,of=myramdisk指 输出文件是myramdisk,bs=1k指读/写块的大小为1024,count=8000 指复制8000个块。 执行该命令后/home/embedded目录中就会产生一个8MB的文件,文件名为 myramdisk。 步骤2:格式化myramdisk为ext2文件系统。 [root@localhost embedded]# mke2fs -F -m 0 myramdisk 将myramdisk文件用mke2fs命令格式化成ext2文件系统。

7.2 Linux根文件系统的制作
步骤3:在/mnt目录中创建ramdisk目录,用于挂载myramdisk。 [root@localhost embedded]# mkdir /mnt/ramdisk 步骤4:挂载myramdisk到/mnt/ramdisk。 [root@localhost embedded]# mount -o loop myramdisk /mnt/ramdisk 将myramdisk文件系统映像挂载到/mnt/ramdisk目录。 步骤5:下载并复制busybox1.1.0到embedded目录中,并解压缩busybox1.1.0.tar.bz2。 [root@localhost embedded]# tar xjvf busybox-1.1.0.tar.bz2 步骤6:进入busybox-1.1.0目录中。 [root@localhost embedded]# cd busybox-1.1.0/ 步骤7:让busybox预配置。 [root@localhost busybox-1.1.0]# make defconfig 预配置会把常用选项都选上,提高配置效率。若不进行预配置,则在步 骤8中,每个选项都要手工进行配置。

7.2 Linux根文件系统的制作
步骤8:进行busybox配置。 [root@localhost busybox-1.1.0]# make menuconfig ============================================= 特别注意下面的修改,其他根据需要进行添加 ============================================= General Configuration ---> [*] Support for devfs Build Options ---> [*] Build BusyBox as a static binary (no shared libs) [*] Do you want to build BusyBox with a Cross Compiler? (/usr/local/arm/3.4.1/bin/arm-linux-) Cross Compiler prefix #注意这里指明交叉编译器是3.4.1 配置过程通过光标键、空格键、回车键组合使用实现,每个选项左边的 [ ]表明不选择,[*]表明选择,若最右边有--->,则表明其下有子选 项,选中并按回车键后可进入其子选项。

7.2 Linux根文件系统的制作
步骤9:进行编译。 [root@localhost busybox-1.1.0]#make 步骤10:产生安装文件。 [root@localhost busybox-1.1.0]#make install 产生的安装文件存放在_install子目录中。 步骤11:复制生成的文件到/mnt/ramdisk目录中。 [root@localhost _install]# cp -rf _install/* /mnt/ramdisk 步骤12:在/mnt/ramdisk目录中建立dev目录。 [root@localhost _install]# mkdir /mnt/ramdisk/dev 步骤13:在/mnt/ramdisk/dev目录中,建立console和null两个字符设备 文件。 [root@localhost _install]# mknod /mnt/ramdisk/dev/console c 5 1 [root@localhost _install]# mknod /mnt/ramdisk/dev/null c 1 3 若不建立这两个字符设备文件,内核加载ramdisk后将不能进入命令提示 符界面,而出现错误提示Warning: unable to open an initial console。

7.2 Linux根文件系统的制作
步骤14:在/mnt/ramdisk目录中建立etc、proc目录。 [root@localhost _install]# mkdir /mnt/ramdisk/etc [root@localhost _install]# mkdir /mnt/ramdisk/proc etc、proc、dev目录通常是系统必需的。 步骤15:在/mnt/ramdisk/etc目录中建立init.d目录。 [root@localhost _install]# mkdir /mnt/ramdisk/etc/init.d 步骤16:在/mnt/ramdisk/etc/init.d目录中创建文件rcS。 [root@localhost _install]# touch /mnt/ramdisk/etc/init.d/rcS

7.2 Linux根文件系统的制作
步骤17:编辑/mnt/ramdisk/etc/init.d/rcS。 [root@localhost _install]# vi /mnt/ramdisk/etc/init.d/rcS 添加以下内容: #!/bin/sh #mount for all types /bin/mount -a #lcd mknod /dev/video0 c 81 0 mknod /dev/fb0 c 29 0 mknod /dev/tty0 c 4 0 步骤18:添加rcS的执行权限。 [root@localhost _install]# chmod +x /mnt/ramdisk/etc/init.d/rcS

7.2 Linux根文件系统的制作
步骤15至步骤18是因为busybox通过运行/etc/init.d/下的 rcS来做一些系统初始化工作。 步骤19:卸载/mnt/ramdisk目录。 [root@localhost _install]# umount /mnt/ramdisk 步骤20:对文件myramdisk进行文件系统检查。 [root@localhost embedded]# cd /home/embedded [root@localhost embedded]# e2fsck myramdisk 步骤21:对myramdisk进行压缩打包。 [root@localhost embedded]# gzip -9 myramdisk 步骤22:复制myramdisk.gz 文件到/tftpboot目录中。 [root@localhost embedded]# cp myramdisk.gz /tftpboot/

7.2 Linux根文件系统的制作
步骤23:测试生成的文件系统。 在另一终端中打开minicom,复位开发板,进入PPCBoot的命令行界面, 执行下面两行语句: SMDK2410 # setenv bootargs console=ttyS0 initrd=0x30800000 root= /dev/ram init=/linuxrc SMDK2410 # tftp 0x30008000 zImage; tftp 0x30800000 myramdisk.gz; go 0x30008000 看到“Please press Enter to accivate this console.”信息就说明 制作的文件系统成功了,按回车键后就进入Linux命令提示符状态了。 如下所示: BusyBox v1.1.0 (2007.09.03-06:36+0000) Built-in shell (ash) Enter 'help' for a list of built-in commands. -sh: can't access tty; job control turned off / # 当然,上面的制作过程也是比较初级的,比如,还有“Cannot read /etc/fstab: No such file or directory”、“-sh: can't access tty; job control turned off”之类的错误信息,在实际应用中, 应该更为深入地去做,而且在实际应用中最主要的还是要添加实用的 应用程序。

7.2 Linux根文件系统的制作
设置内核的启动参数 应该说,在将内核映像和根文件系统映像拷贝到 RAM 空间中后,就可以准备启动 Linux内核了.。但是在调用 内核之前,应该作一步准备工作,即设置 Linux 内核的 启动参数。 Linux 2.4.x以后的内核都倾向以标记列表 (tagged list)的形式来传递启动参数。启动参数标记列 表 以标记 ATAG_CORE 开始,以标记 ATAG_NONE 结束。 每个标记由 tag_header 结构和随后 的特定参数值数据 结构来组成。(参考源代码文件:linux.c) ?? #define ATAG_NONE 0x00000000 struct tag_header { uint32 size; uint32 tag; ? }; ? ??

7.2 Linux根文件系统的制作
struct tag { struct tag_header hdr; union { struct tag_core core; struct tag_mem32 mem; struct tag_videotext videotext; struct tag_ramdisk ramdisk; struct tag_initrd initrd; struct tag_serialnr serialnr; struct tag_revision revision; struct tag_videolfb videolfb; struct tag_cmdline cmdline; struct tag_acorn acorn; /* * DC21285 specific */ struct tag_memclk memclk; } u; };

7.2 Linux根文件系统的制作
在嵌入式 Linux 系统中,通常需要由 Boot Loader设置的 常见启动参数有:ATAG_CORE、ATAG_MEM、ATAG_CMDLINE、 ATAG_RAMDISK、ATAG_INITRD 等。比如,设置ATAG_CORE 的代码如下: void create_tags(void){ tags = (struct tag *)BOOT_PARAMS; setup_tag_core(0, 0); setup_tag_initrd2(0xA1000000, 0x00420000); setup_end_tag(); return; } static void setup_tag_core(uint32 rootdev, uint32 flags){ tags->hdr.tag = ATAG_CORE; tags->hdr.size = tag_size(tag_core);

7.2 Linux根文件系统的制作
tags->u.core.flags = flags; // not use. tags->u.core.pagesize = 0; // set read/write. tags->u.core.rootdev = 0; tags = tag_next(tags); return; } 其中,BOOT_PARAMS表示内核启动参数在内存中的起 始基地址,指针tags是一个struct tag 类型的指针。宏 tag_next()将以指向当前标记的指针为参数,计算出当前 标记的下一个标记的起始地址。注意,内核的根文件系统 所在的设备 ID 就是在这里设置的。 下面是设置 ATAG_INITRD 的示例代码,它告诉内 核在 RAM 中的什么地方可以找到initrd 映象(压缩格 式)以及它的大小:

7.2 Linux根文件系统的制作
static void setup_tag_initrd2(uint32 start, uint32 size){ tags->hdr.tag = ATAG_INITRD2; tags->hdr.size = tag_size(tag_initrd); tags->u.initrd.start = start; tags->u.initrd.size = size; tags = tag_next(tags); return; } 最后,设置ATAG_NONE标记,结束整个启动参数列表: static void setup_end_tag(void){ tags->hdr.tag = ATAG_NONE; tags->hdr.size = 0; return; }

7.2 Linux根文件系统的制作
调用内核 Boot Loader调用Linux内核的方法是直接跳转到内核的第一条指 令处,也即直接跳转到 MEM_START+0x8000 地址处。在跳转时,下 列条件要满足: CPU 寄存器的设置: R0=0; R1=机器类型 ID; R2=启动参数标记列表在 RAM 中起始基地址; CPU模式: 必须禁止中断(IRQs 和 FIQs )CPU必须 SVC 模式; Cache 和 MMU 的设置: MMU 必须关闭; 指令Cache 可以打开也可以关闭; 数据Cache 必须关闭;如果 用C语言,可以像下列示例代码这样来调用内核:(粗体表示)

7.2 Linux根文件系统的制作
static bool do_boot(int argc, char **argv){ void (*kernel)(int zero, int arch); if (argc == 1) { struct map *mp; mp = find_map("kernel"); if (!mp){ printf(" can't found map for kernel.\n"); goto invalid; } kernel = (void *)mp->dramb; } else if (argc == 2){ bool res; ulong tmp; res = strtoul(argv[1], &tmp, 16); if (!res) goto invalid;

7.2 Linux根文件系统的制作
kernel = (void *)tmp; } else goto invalid; if (!get_kernel_size(kernel)){ printf(" error: kernel is not exists.\n"); return false; } create_tags(); printf("starting kernel ...\n"); kernel(0, 200); return true; invalid : boot_usage(); return false; }

LUPA开源软件实训就业见习基地
WWW.LUPA.GOV.CN


相关文章:
Linux内核裁减及根文件系统定制
Linux内核裁减及根文件系统定制 隐藏>> 一、内核编译 1、准备工作 (1)整理出系统需要支持的硬件、文件系统类型以及网络协议等内容。 (2)建议用命令 uname –r ...
Linux内核裁减及根文件系统定制(之二)--------根文件系统定制
Linux 内核裁减及根文件系统定制(之二)---根文件系统定制 二、根文件系统定制 1、 创建一个全新的根文件系统 你可以用 mkinitrd 来创建,这里介绍另外一种方式,...
04 Linux内核与根文件系统映像文件的编译及调试
修改 Linux 内核和文件系统的 Makefile 文件,编译链接并制作 Image 文件; 3. ...Linux内核定制与根文件系... 46页 1下载券 Linux系统内核编译过程中... 暂无...
BootLoader 内核 文件系统
? Linux 内核 特定于嵌入式平台的定制内核。 ? ...寻址系统的RAM单元 (4) 加载内核映像和根文件系统...内核制作:制作嵌入式平台使用的 Linux 内核,方法和...
内核移植及根文件系统制作(图解)
内核移植及根文件系统制作(图解)_电脑基础知识_IT/计算机_专业资料。内核移植及...Linux内核定制与根文件系... 46页 1下载券 linux内核移植、根文件系... 18...
Linux内核与跟文件系统的关系
Linux内核与跟文件系统的关系_计算机软件及应用_IT/计算机_专业资料。Linux内核与跟文件系统的关系 Linux 内核与根文件系统的关系 开篇题外话:对于 Linux 初学者来说...
linux内核制作
linux内核制作_信息与通信_工程科技_专业资料。linux内核及其根文件系统制作Linux 操作系统移植一、配置好交叉编译工具链 (几种 image 的区别应用,uimage,zimage,b...
Linux内核配置编译与文件系统构建
Busybox 软件制作嵌 入式文件系统的方法,并且掌握嵌入式 Linux 文件系统的挂载...5.Bootloader 可以通过 tftp 协议从 PC 机上下载内核镜像和根文件 系统镜像。...
Linux 根文件系统制作流程 20160308
如何制作根文件系统 1 概述如何制作一个最小的根文件系统, 能让内核在该文件系统中运行?该文章是 读《嵌入式 Linux 应用开发完全手册》韦东山 书籍简要总结。 ...
初级根文件系统的制作
补充-根文件系统制作1 23页 免费 如何制作根文件系统 4页 1下载券 实验04 制作根文件系统 9页 1下载券 喜欢此文档的还喜欢 Linux内核定制与根文件系... ...
更多相关标签:
linux内核定制 | bochs 定制linux内核 | linux系统内核 | linux 查看系统内核 | linux内核子系统 | linux内核文件系统 | linux内核系统调用 | linux操作系统内核 |