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

上传人:夺命阿水 文档编号:756084 上传时间:2023-11-08 格式:PPT 页数:45 大小:290.50KB
返回 下载 相关 举报
第7章 内核定制与根文件系统制作.ppt_第1页
第1页 / 共45页
第7章 内核定制与根文件系统制作.ppt_第2页
第2页 / 共45页
第7章 内核定制与根文件系统制作.ppt_第3页
第3页 / 共45页
第7章 内核定制与根文件系统制作.ppt_第4页
第4页 / 共45页
第7章 内核定制与根文件系统制作.ppt_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《第7章 内核定制与根文件系统制作.ppt》由会员分享,可在线阅读,更多相关《第7章 内核定制与根文件系统制作.ppt(45页珍藏版)》请在课桌文档上搜索。

1、第7章 内核定制与根文件系统制作,本章重点,内核配置选项的含义。内核移植的基本过程根文件系统的制作,本章内容,7.1 Linux内核移植7.2 Linux根文件系统的制作,7.1 Linux内核移植,嵌入式Linux是按照嵌入式操作系统的要求设计的一种小型操作系统,由一个内核及若干根据需要进行定制的系统模块组成,其内核很小,通常只有几百KB,非常适合移植到嵌入式系统中。7.1.1 内核移植的基本概念内核是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。所谓移植,顾名思义就是通过适当的修改使之适应新的硬件体系。Linux内核移植就是根据实际

2、的硬件系统量身定做一个更高效、更稳定的内核。,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/ke

3、rnel/v2.6/linux-2.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:/,注意:若未安装交叉编译器,则还需先安装交叉编译器。下面所采用的交叉编译器是handhelds.org制作的arm-linux-gcc-

4、3.4.1。下载地址:ftp:/ftp.handhelds.org/projects/toolchain/arm-linux-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)生成新内核。移植流程如图.1所示。,7.1 Linux内核移植,7.1.4 内核移植的具体操作步骤1:

5、复制linux-2.6.22.5内核压缩包到embedded目录中,并解压缩。rootlocalhost embedded#tar xjvf linux-2.6.22.5.tar.bz2步骤2:进入linux-2.6.22.5目录中。rootlocalhost embedded#cd linux-2.6.22.5/步骤3:修改Makefile文件。rootlocalhost linux-2.6.22.5#vi Makefile#ARCH?=$(SUBARCH)#注释该行#CROSS_COMPILE?=#注释该行ARCH?=arm#添加该行CROSS_COMPILE?=/usr/local/ar

6、m/3.4.1/bin/arm-linux-#添加该行,7.1 Linux内核移植,步骤4:执行 make menuconfig 配置内核。rootlocalhost linux-2.6.22.5#make menuconfig,注意:可以尝试使用命令make xconfig,配置会更方便,通常有以下4种主要的内核配置方法。1make config命令行方式,配置相对繁琐。2make oldconfig使用一个已有的.config配置文件,提示行会提示之前没有配置过的选项,相对较简单。3make menuconfig基于文本图形化终端配置菜单,是目前使用最广泛的配置内核方法。4make xco

7、nfig基于x窗口的配置菜单,用户可以通过图形界面和鼠标进行配置。,7.1 Linux内核移植,修改以下相关内容,要注意选的是*还是 M 之类。General setup-*Initial RAM filesystem and RAM disk(initramfs/initrd)supportSystem Type-ARM system type(ARM Ltd.Versatile family)-(X)ARM Ltd.Versatile family改成(X)Samsung S3C2410,S3C2412,S3C2413,S3C2440,S3C2442,S3C2443,7.1 Linux内核

8、移植,ARM system type(Samsung S3C2410,S3C2412,S3C2413,S3C2440,S3C2442,S3C2443)-S3C2410 DMA support(NEW)改成*S3C2410 DMA supportS3C2410 Machines-SMDK2410/A9M2410(NEW)改成*SMDK2410/A9M2410,7.1 Linux内核移植,Boot options-()Default kernel command string 改成(console=ttySAC0 root=/dev/ram init=/linuxrc)Default kernel

9、 command stringDevice 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内核移植,LED Class

10、Support LED Support for Samsung S3C24XX GPIO LEDs(NEW)改成 LED Support for Samsung S3C24XX GPIO LEDs LED Trigger support(NEW)改成*LED Trigger support LED Timer Trigger LED Heartbeat TriggerMultimedia devices-Video For Linux改成 Video For Linux*DAB adapters(NEW)改成 DAB adapters,7.1 Linux内核移植,Graphics suppor

11、t-S3C2410 LCD framebuffer support(NEW)改成 S3C2410 LCD framebuffer support Console display driver support-*VGA text console(NEW)改成 VGA text console Framebuffer Console support(NEW)改成 Framebuffer Console support*Framebuffer Console Rotation*Select compiled-in fonts*VGA 8x16 font*Mini 4x6 font Bootup lo

12、go(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/driversFloating point emulation-NWFPE math emulation(NEW)改成*NWFPE math emulation*Support extended precisionD

13、evice Drivers-Memory Technology Device(MTD)support-改成 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)改成 Detect flash chips by Common Flash Interface(CFI)

14、probe Support for Intel/Sharp flash chips(NEW)改成 Support for Intel/Sharp flash chips Support for RAM chips in bus mapping(NEW)改成 Support for RAM chips in bus mapping,7.1 Linux内核移植,Support for ROM chips in bus mapping(NEW)改成 Support for ROM chips in bus mappingMapping drivers for chip access-Map driv

15、er for platform device RAM(mtd-ram)(NEW)改成 Map driver for platform device RAM(mtd-ram)Self-contained MTD device drivers-Physical system RAM(NEW)改成 Physical system RAM MTD using block device(NEW)改成 MTD using block device,7.1 Linux内核移植,Parallel port support-Parallel port support改成 Parallel port suppor

16、tSCSI device support-SCSI device support改成 SCSI device supportMulti-device support(RAID and LVM)-*Multiple devices driver support(RAID and LVM)改成 Multiple devices driver support(RAID and LVM)ISDN subsystem-ISDN support改成 ISDN support,7.1 Linux内核移植,Input device support-Joystick interface改成 Joystick i

17、nterface Touchscreen interface(NEW)改成 Touchscreen interface(320)Horizontal screen resolution(240)Vertical screen resolution Touchscreens(NEW)-改成 Touchscreens-Philips UCB1400 touchscreen(NEW)改成 Philips UCB1400 touchscreen,7.1 Linux内核移植,File systems-Miscellaneous filesystems-Journalling Flash File Sys

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

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

20、/目录中。,7.1 Linux内核移植,步骤7:将zImage文件复制到/tftpboot目录中。rootlocalhost kernel#cp arch/arm/boot/zImage/tftpboot/步骤8:测试生成的新内核能否启动。在另一终端中打开minicom,复位开发板,进入PPCBoot的命令行界面,执行下面两行语句:SMDK2410#setenv bootargs console=ttySAC0 initrd=0 x30800000,0 x00440000 root=/dev/ram init=/linuxrcSMDK2410#tftp 0 x30008000 zImage;g

21、o 0 x30008000,注意:这里测试没有使用ramdisk文件系统,原因是前面移植的文件系统不能在这个内核下使用,需要移植更高版本的busybox才能使用。,7.1 Linux内核移植,出现以下信息,就表明内核能够运行在开发板上了。Uncompressing Linux.done,booting t.Linux version 2.6.22.5(rootlocalhost.localdomain)(arm-linux-gcc version 3.4.1)#7 Sun Sep 2 14:24:43 CST 2007CPU:ARM920T 41129200 revision 0(ARMv4T

22、),cr=c0007177Machine:SMDK2410ATAG_INITRD is deprecated;please update your bootloader.Memory policy:ECC disabled,Data cache writebackCPU S3C2410(id 0 x32410000)S3C2410:core 202.800 MHz,memory 101.400 MHz,peripheral 50.700 MHz S3C24XX Clocks,(c)2004 Simtec Electronics当然,对于实际的应用中的内核移植,需要根据实际需要,对某些选项进行裁

23、剪,以使生成的内核文件尽可能小。当裁剪好的内核满足应用需要后,就可以烧写到目标板上了。以前做过非常多次都没问题的,但这次做内核是运行了,但这些输出信息就是没有。,7.2 Linux根文件系统的制作,根文件系统就是要包括Linux启动时所必需的目录和关键性的文件。例如,在Linux启动时都需要有init目录下的相关文件,在Linux挂载分区时,Linux一定会找/etc/fstab这个挂载文件等,根文件系统中还包括许多应用程序bin目录等,任何包括这些Linux系统启动所必需的文件都可以成为根文件系统。,7.2 Linux根文件系统的制作,7.2.1 根文件系统概述1常见的根文件系统Linux支

24、持多种文件系统类型,为了对各类文件系统进行统一管理,Linux引入了虚拟文件系统(virtual file system,VFS),为各类文件系统提供一个统一的操作界面和应用编程接口,如图7.2Linux虚拟文件系统所示。,7.2 Linux根文件系统的制作,Linux启动时,第一个必须挂载的是根文件系统;若系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动。之后可以自动或手动挂载其他文件系统。因此,一个系统中可以同时存在不同的文件系统。不同的文件系统类型有不同的特点,因而根据存储设备的硬件特性、系统需求等有不同的应用场合。在嵌入式Linux应用中,主要的存储设备为RAM(DRAM、S

25、DRAM)和ROM(常采用Flash存储器),常用的基于存储设备的文件系统类型包括JFFS2、YAFFS、CRAMFS、ROMFS、RAMDISK、RAMFS/TMPFS等。2根文件系统的目录结构“/”根目录部分有以下子目录:/usr 目录包含所有的命令、程序库、文档和其他文件。这些文件在正常操作中是不会被改变的。这个目录也包含Linux发行版本的主要应用程序,譬如Netscape。,7.2 Linux根文件系统的制作,/var 目录包含在正常操作中被改变的文件:假脱机文件、记录文件、加锁文件、临时文件和页格式化文件等。/home 目录包含用户的文件:参数设置文件、个性化文件、文档、数据、E-

26、mail、缓存数据等。这个目录在系统升级时应该保留。/proc 目录整个包含虚幻的文件。它们实际上并不存储在磁盘上,也不占用任何空间(用ls l 可以显示它们的大小)。当查看这些文件时,实际上是在访问存储在内存中的信息,这些信息用于访问系统/bin 系统启动时需要的执行文件(二进制),这些文件可以被普通用户使用。/sbin 系统执行文件(二进制),这些文件不打算被普通用户使用(普通用户仍然可以使用它们,但要指定目录)。/etc 操作系统的配置文件目录。/root 系统管理员(也叫超级用户或根用户)的Home目录。,7.2 Linux根文件系统的制作,/dev 设备文件目录。Linux下设备被当

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

28、统建立流程所示。,7.2 Linux根文件系统的制作,2根文件系统建立的具体操作根文件系统建立操作步骤如下。步骤1:在embedded目录中创建ramdisk的文件系统映像文件。rootlocalhost embedded#dd if=/dev/zero of=myramdisk bs=1kcount=8000dd命令的作用是用指定大小的块复制一个文件,并在复制的同时进行指定的转换,if=/dev/zero指输入文件是/dev/zero,of=myramdisk指输出文件是myramdisk,bs=1k指读/写块的大小为1024,count=8000指复制8000个块。执行该命令后/home/

29、embedded目录中就会产生一个8MB的文件,文件名为myramdisk。步骤2:格式化myramdisk为ext2文件系统。rootlocalhost embedded#mke2fs-F-m 0 myramdisk将myramdisk文件用mke2fs命令格式化成ext2文件系统。,7.2 Linux根文件系统的制作,步骤3:在/mnt目录中创建ramdisk目录,用于挂载myramdisk。rootlocalhost embedded#mkdir/mnt/ramdisk步骤4:挂载myramdisk到/mnt/ramdisk。rootlocalhost embedded#mount-o

30、loop myramdisk/mnt/ramdisk将myramdisk文件系统映像挂载到/mnt/ramdisk目录。步骤5:下载并复制busybox1.1.0到embedded目录中,并解压缩busybox-1.1.0.tar.bz2。rootlocalhost embedded#tar xjvf busybox-1.1.0.tar.bz2步骤6:进入busybox-1.1.0目录中。rootlocalhost embedded#cd busybox-1.1.0/步骤7:让busybox预配置。rootlocalhost busybox-1.1.0#make defconfig预配置会把常

31、用选项都选上,提高配置效率。若不进行预配置,则在步骤8中,每个选项都要手工进行配置。,7.2 Linux根文件系统的制作,步骤8:进行busybox配置。rootlocalhost busybox-1.1.0#make menuconfig=特别注意下面的修改,其他根据需要进行添加=General Configuration-*Support for devfsBuild Options-*Build BusyBox as a static binary(no shared libs)*Do you want to build BusyBox with a Cross Compiler?(/u

32、sr/local/arm/3.4.1/bin/arm-linux-)Cross Compiler prefix#注意这里指明交叉编译器是3.4.1配置过程通过光标键、空格键、回车键组合使用实现,每个选项左边的 表明不选择,*表明选择,若最右边有-,则表明其下有子选项,选中并按回车键后可进入其子选项。,7.2 Linux根文件系统的制作,步骤9:进行编译。rootlocalhost busybox-1.1.0#make步骤10:产生安装文件。rootlocalhost busybox-1.1.0#make install产生的安装文件存放在_install子目录中。步骤11:复制生成的文件到/m

33、nt/ramdisk目录中。rootlocalhost _install#cp-rf _install/*/mnt/ramdisk步骤12:在/mnt/ramdisk目录中建立dev目录。rootlocalhost _install#mkdir/mnt/ramdisk/dev步骤13:在/mnt/ramdisk/dev目录中,建立console和null两个字符设备文件。rootlocalhost _install#mknod/mnt/ramdisk/dev/console c 5 1rootlocalhost _install#mknod/mnt/ramdisk/dev/null c 1 3

34、若不建立这两个字符设备文件,内核加载ramdisk后将不能进入命令提示符界面,而出现错误提示Warning:unable to open an initial console。,7.2 Linux根文件系统的制作,步骤14:在/mnt/ramdisk目录中建立etc、proc目录。rootlocalhost _install#mkdir/mnt/ramdisk/etcrootlocalhost _install#mkdir/mnt/ramdisk/procetc、proc、dev目录通常是系统必需的。步骤15:在/mnt/ramdisk/etc目录中建立init.d目录。rootlocalho

35、st _install#mkdir/mnt/ramdisk/etc/init.d步骤16:在/mnt/ramdisk/etc/init.d目录中创建文件rcS。rootlocalhost _install#touch/mnt/ramdisk/etc/init.d/rcS,7.2 Linux根文件系统的制作,步骤17:编辑/mnt/ramdisk/etc/init.d/rcS。rootlocalhost _install#vi/mnt/ramdisk/etc/init.d/rcS添加以下内容:#!/bin/sh#mount for all types/bin/mount-a#lcdmknod/d

36、ev/video0 c 81 0mknod/dev/fb0 c 29 0mknod/dev/tty0 c 4 0步骤18:添加rcS的执行权限。rootlocalhost _install#chmod+x/mnt/ramdisk/etc/init.d/rcS,7.2 Linux根文件系统的制作,步骤15至步骤18是因为busybox通过运行/etc/init.d/下的rcS来做一些系统初始化工作。步骤19:卸载/mnt/ramdisk目录。rootlocalhost _install#umount/mnt/ramdisk步骤20:对文件myramdisk进行文件系统检查。rootlocalho

37、st embedded#cd/home/embeddedrootlocalhost embedded#e2fsck myramdisk步骤21:对myramdisk进行压缩打包。rootlocalhost embedded#gzip-9 myramdisk步骤22:复制myramdisk.gz 文件到/tftpboot目录中。rootlocalhost embedded#cp myramdisk.gz/tftpboot/,7.2 Linux根文件系统的制作,步骤23:测试生成的文件系统。在另一终端中打开minicom,复位开发板,进入PPCBoot的命令行界面,执行下面两行语句:SMDK241

38、0#setenv bootargs console=ttyS0 initrd=0 x30800000 root=/dev/ram init=/linuxrcSMDK2410#tftp 0 x30008000 zImage;tftp 0 x30800000 myramdisk.gz;go 0 x30008000看到“Please press Enter to accivate this console.”信息就说明制作的文件系统成功了,按回车键后就进入Linux命令提示符状态了。如下所示:BusyBox v1.1.0(2007.09.03-06:36+0000)Built-in shell(as

39、h)Enter help for a list of built-in commands.-sh:cant access tty;job control turned off/#当然,上面的制作过程也是比较初级的,比如,还有“Cannot read/etc/fstab:No such file or directory”、“-sh:cant access tty;job control turned off”之类的错误信息,在实际应用中,应该更为深入地去做,而且在实际应用中最主要的还是要添加实用的应用程序。,7.2 Linux根文件系统的制作,设置内核的启动参数应该说,在将内核映像和根文件系统

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

41、统的制作,struct tag struct tag_header hdr;union struct tag_corecore;struct tag_mem32 mem;struct tag_videotext videotext;struct tag_ramdisk ramdisk;struct tag_initrdinitrd;struct tag_serialnr serialnr;struct tag_revision revision;struct tag_videolfb videolfb;struct tag_cmdline cmdline;struct tag_acornaco

42、rn;/*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(0 xA1000000,0 x0042

43、0000);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表示内核启动

44、参数在内存中的起始基地址,指针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_si

45、ze(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_START0 x8000 地址处。在跳转时,下列条件要满足

46、:CPU 寄存器的设置:R00;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(

47、kernel);if(!mp)printf(cant found map for kernel.n);goto invalid;kernel=(void*)mp-dramb;else if(argc=2)bool res;ulong tmp;res=strtoul(argv1,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;,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号