Name | Modified | Size | Downloads / Week |
---|---|---|---|
Parent folder | |||
readme.txt | 2015-06-06 | 22.4 kB | |
zenglOX_v3.2.0.zip | 2015-06-06 | 1.9 MB | |
zenglOX.iso | 2015-06-06 | 5.1 MB | |
qemu-2.3.0.tar.bz2 | 2015-06-05 | 24.7 MB | |
mpfr-3.1.2.tar.bz2 | 2015-06-04 | 1.2 MB | |
mpc-1.0.3.tar.gz | 2015-06-04 | 669.9 kB | |
gmp-6.0.0a.tar.bz2 | 2015-06-04 | 2.3 MB | |
gcc-4.9.2.tar.bz2 | 2015-06-04 | 89.9 MB | |
binutils-2.25.tar.bz2 | 2015-06-04 | 24.0 MB | |
HID1_11.pdf | 2015-05-14 | 675.7 kB | |
usb11_RemovePassword.pdf | 2015-05-12 | 2.0 MB | |
uhci11d.pdf | 2015-05-11 | 524.6 kB | |
Totals: 12 Items | 153.1 MB | 0 |
zenglOX v3.2.0 USB v1.1, UHCI, USB KeyBoard, USB Mouse ========================================= 当前版本新增的功能,以及修复的BUG ========================================= 当前版本针对Qemu模拟器,增加了UHCI控制器(USB v1.1标准)的驱动程式, 以及USB鼠标和键盘的驱动程式,目前只能在Qemu模拟器下实现USB的鼠标键盘功能。 这些驱动程式的代码,主要是从pdoane的osdev项目中移植过来的, 另外,有部分代码是从Linux-3.2.0的内核源码中移植过来的。 pdoane的osdev项目的github地址为:https://github.com/pdoane/osdev 除了USB相关的驱动程式外,当前版本还增加了klog日志,该日志会将内核通过 zlox_monitor_write等函数输出的信息,记录到里面,当然目前最多只能记录10 * 1024即10K字节 的内容。这样,在命令行中,就可以通过cat klog或者ee编辑器来查看klog里的内容, 从而可以简单的查看下内核输出了些什么信息。 在内核刚启动时,当zlox_monitor_write输出的内容很多时,会自动滚屏。之前的版本 中并没有滚屏相关的函数。 shell命令行中可以使用Home,End及上下左右键 (上下键在之前的版本里就有了,主要是左右键可以移动光标), 此外,当前版本实现了真正意义上的多任务,当然,文件读写操作目前同一时间只允许一个任务执行, 在之前的版本中,当你执行任何一个程式时,其实是以关闭中断的方式在运行的, 除非遇到syscall_idle_cpu系统调用时,才会将CPU资源释放出去,鼠标键盘以及定时器中断才能 被处理,因此,当你执行isoget -all命令或者用cat命令显示一个内容很长的文件时, 你会发现鼠标键盘都不能使用,必须等这些命令执行完毕才能用,那么,如果某个 用户程式陷入死循环的话,那么内核基本上也就挂在那里了。 当前版本通过将desktop程式里的syscall_execve语句的位置做调整,让桌面启动的 其他应用能够以开中断的方式运行,然后通过对zlox_task.c文件中的任务调度算法 做调整,让每个应用都能分配到合理的CPU资源。另外,针对一些可能会长时间进行 I/O操作的系统调用,比如文件读写相关的函数,以及zlox_cmd_window_put之类的显示输出 函数,都在里面加入了zlox_isr_detect_proc_irq函数,该函数会调用_zlox_idle_cpu函数来 将控制权释放出去,让别的任务有机会运行,以及让鼠标键盘之类的中断能被响应。 由于当前版本可以多个任务并行运行,而文件读写操作中,目前有太多全局变量有可能会 在并行运行时被修改破坏掉,因此,在zlox_fs.c文件里加入了g_fs_lock的文件锁,当某个任务需要 进行文件读写相关的操作时,会先判断该文件锁是否被其他任务加锁了,如果加锁了,它就会 释放CPU资源,然后等待解锁。因此,如果多个任务同时都需要进行文件读写操作的话,就可能 出现某些任务等待另一些任务的情况。这都是文件锁在起作用。 在多任务当中,那些主动使用了syscall_idle_cpu系统调用的任务具有最低优先级, 其他的有消息需要处理的任务,或者在执行文件读写的任务,或者在执行显示输出操作的任务, 以及其他没有使用过syscall_idle_cpu系统调用的任务,这些任务都被认为是处于Busy繁忙中的任务, 都具有相同优先级。他们会平分CPU资源,如果你觉得某个任务过于繁忙了,一直没停下来的话, 或者陷入了死循环的话,可以另启一个终端,用ps命令查看其ID号,再用kill命令将其终止掉。 当某个任务被强行终止掉时,如果它执行过文件锁的加锁操作的话,会自动将文件锁解除掉, 从而让其他任务可以继续加锁执行。 当前版本还对某些程式的参数和用法做了些调整: 例如: testoverflow的参数调整为 testoverflow [-u][-x][-k] 其中,testoverflow -u 还是跟以前一样是抛出一个用户栈溢出的错误, testoverflow -x则会陷入一个for语句的死循环,如果是之前的版本,这样的死循环会当掉系统, 当前版本里,可以将其kill掉,testoverflow -k 则会通过syscall_overflow_test系统调用, 以内核栈溢出的方式,抛出double fault异常,这个异常属于严重错误,会当掉系统,然后 dump出一些基本的寄存器信息,testoverflow属于测试用的程式。 ee编辑器目前为v1.4.0的版本,可以通过ee -v命令来查看版本号。 增加了F3功能键,当按下F3键时,会将编辑器设置为read only 只读模式,同时在顶部flags区域显示一个小写的r字母,表示当前位于只读模式,再按下F3时, 可以切换回writable可写模式,同时顶部的flags区域的r字母会变回小数点, 因此,F3键可以在只读和可写模式之间进行切换,默认是可写模式,在只读模式下,你不能修改 文件的内容,当然可以保存文件,这样,当你只需要查看文件内容时,就可以设置为只读模式, 来防止一些误修改的操作,因为,ee编辑器里有很多功能是通过ctrl+字符来实现的,如果 ctrl键没按下的话,那么对应的字符就会误修改文件的内容。 zengl程式增加了一个-l参数,只有使用-l或-d参数时,zengl才会将debug info调试信息输出 到 hd/zl.log 的文件中,如果zengl后面只跟随了脚本文件名的话,将不会输出调试信息。 由于修改了ee和zengl程式,因此,当前版本在执行时,需要通过isoget -all命令来更新磁盘里 的文件数据。 ps程式的参数调整为:ps [shownum][-m][-d [shownum]][-u [shownum]][-x [shownum]] 即ps程式的最后可以跟随一个数字,表示显示前多少条任务信息,这样,当任务数量多的时候,可以 将任务信息,一部分一部分的显示出来。 lspci程式在显示每个PCI设备的信息时,会多显示一个prog_if的信息,通过class,sub_class以及 prog_if信息,就可以更准确的判断出设备类型,比如,UHCI控制器的PCI配置空间里的class 为0x0C,sub_class为0x03,prog_if为0x00 。 cat程式的参数调整为:cat <filename> [show char num] 也就是在cat程式的最后可以提供一个数字,通过该数字来确定要输出前多少个字符, 这是个可选参数,当没提供这个显示字符数时,将会把文件里的所有内容都显示出来。 当文件内容很多时,通过显示字符数可以将内容一段一段的显示出来,比如提供1000的话, 就可以看到前1000个字符底部的数据,提供2000的话,就可以看到前2000个字符的底部数据, 因为,term终端没有垂直滚动条,我们目前只能看到一部分输出内容。 当前版本还修复了zlox_kheap.c与zlox_uheap.c文件中的堆算法上的BUG。在zlox_free 与zlox_uheap_free函数中,当header指针被contract回收操作,完全释放掉了对应的物理内存 页面时,再对header指针进行读操作时,就会抛出分页不存在的错误。 ========================================= 在GCC 4.9.x中,交叉编译环境的组建 ========================================= 在ubuntu 15.04的系统中,系统自带的GCC是4.9.2的版本。这个版本的GCC无法对v0.0.1版本中 提到的binutils-2.23.1,以及gcc-4.7.2进行编译,这是由于GCC 4.9.2具有 更加严格的语法检测机制,以及该系统环境下的texinfo,因为版本的兼容问题, 也会导致gcc-4.7.2在编译时报错。 因此,我们就需要使用更高版本的gcc来构建交叉编译环境。 gcc-4.9.2的交叉编译环境的组建过程与gcc-4.7.2的过程是差不多的,过程如下: 搭建交叉编译环境最好是在命令行下切换到root用户, 在Ubuntu里默认没有给root设置密码, 可以通过以下命令来设置root密码并切换到root用户: zengl@ubuntu:~$ sudo passwd root zengl@ubuntu:~$ su - 第一个sudo passwd root命令输入后,会提示输入两次root的新密码,设置密码后, 就可以用su -来切换到root ,下面搭建交叉编译工具的过程都用的是root用户。 下面使用mkdir命令新建/mnt/zenglOX/opt/cross目录: root@ubuntu:~# mkdir -p /mnt/zenglOX/opt/cross 最后生成的交叉编译工具集都会安装在/mnt/zenglOX/opt/cross目录内, 当然你也可以安装到别的目录里,不过如果安装在其他目录里, 在编译zenglOX时,就需要对makefile文件里的相关路径进行修改。 我们先来构建binutils-2.25: 先从网盘中下载binutils-2.25.tar.bz2文件, 也可以从 ftp://ftp.gnu.org/gnu/binutils/ 链接中找到对应的版本进行下载, 例如binutils-2.25版本的完整地址为: ftp://ftp.gnu.org/gnu/binutils/binutils-2.25.tar.bz2 将下载的压缩包放置到/mnt/zenglOX目录里,然后使用如下命令进行解压: root@ubuntu:/mnt/zenglOX# tar xvf binutils-2.25.tar.bz2 接着创建binutils-build目录: root@ubuntu:/mnt/zenglOX# mkdir binutils-build 进入该目录: root@ubuntu:/mnt/zenglOX# cd binutils-build root@ubuntu:/mnt/zenglOX/binutils-build# 在用configure进行配置之前,需要先安装texinfo: (否则后面编译时,可能会报`makeinfo' is missing on your system以及 recipe for target 'bfd.info' failed的相关错误, 另外,如果读者遇到了这个编译错误后,再去安装texinfo的话,就必须重新configure配置一遍, 因为只有这样,才能让Makefile文件中与texinfo相关的宏信息修正过来) root@ubuntu:/mnt/zenglOX/binutils-build# sudo apt-get install texinfo 通过前面解压的binutils-2.25目录里的configure脚本来生成Makefile文件: root@ubuntu:/mnt/zenglOX/binutils-build# ../binutils-2.25/configure --prefix=/mnt/zenglOX/opt/cross --target=i586-elf --disable-nls 生成了Makefile后,就可以用make命令来编译了: root@ubuntu:/mnt/zenglOX/binutils-build# make 编译成功后,通过make install命令来安装: root@ubuntu:/mnt/zenglOX/binutils-build# make install 安装完后,应该就可以在/mnt/zenglOX/opt/cross/bin目录中, 看到生成的binutils相关的可执行文件了: root@ubuntu:/mnt/zenglOX/binutils-build# ls ../opt/cross/bin/ i586-elf-addr2line i586-elf-elfedit i586-elf-nm i586-elf-readelf i586-elf-ar i586-elf-gprof i586-elf-objcopy i586-elf-size i586-elf-as i586-elf-ld i586-elf-objdump i586-elf-strings i586-elf-c++filt i586-elf-ld.bfd i586-elf-ranlib i586-elf-strip binutils的交叉工具编译安装好后,就可以继续安装gcc-4.9.2的交叉编译工具了, 先从网盘中下载gcc-4.9.2.tar.bz2,gmp-6.0.0a.tar.bz2,mpfr-3.1.2.tar.bz2,以及 mpc-1.0.3.tar.gz文件,当然也可以从gnu的ftp站点中下载这些文件,具体的链接地址如下: ftp://ftp.gnu.org/gnu/gcc/gcc-4.9.2/gcc-4.9.2.tar.bz2 ftp://ftp.gnu.org/gnu/gmp/gmp-6.0.0a.tar.bz2 ftp://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.gz ftp://ftp.gnu.org/gnu/mpfr/mpfr-3.1.2.tar.bz2 其实也就是 ftp://ftp.gnu.org/gnu/ 这个ftp目录中的各个项目的地址。我们可以 在这个ftp站点里看到gcc及其他GNU工具的各个版本。 将这些文件下载到/mnt/zenglOX目录中后,对这些文件进行解压: root@ubuntu:/mnt/zenglOX# tar xvf gcc-4.9.2.tar.bz2 root@ubuntu:/mnt/zenglOX# tar xvf gmp-6.0.0a.tar.bz2 root@ubuntu:/mnt/zenglOX# tar xvf mpfr-3.1.2.tar.bz2 root@ubuntu:/mnt/zenglOX# tar xvf mpc-1.0.3.tar.gz 由于编译gcc需要用到gmp、mpfr和mpc的源代码,所以首先进入解压后的gcc目录, 在该目录里建立一些符号链接来指向之前解压的gmp、mpfr和mpc的源代码的位置: root@ubuntu:/mnt/zenglOX# cd gcc-4.9.2/ root@ubuntu:/mnt/zenglOX/gcc-4.9.2# ln -s ../gmp-6.0.0 gmp root@ubuntu:/mnt/zenglOX/gcc-4.9.2# ln -s ../mpc-1.0.3 mpc root@ubuntu:/mnt/zenglOX/gcc-4.9.2# ln -s ../mpfr-3.1.2 mpfr root@ubuntu:/mnt/zenglOX/gcc-4.9.2# cd .. root@ubuntu:/mnt/zenglOX# 接着创建gcc-build目录: root@ubuntu:/mnt/zenglOX# mkdir gcc-build 进入该目录,并通过之前解压的gcc-4.9.2目录中的configure工具来生成Makefile: root@ubuntu:/mnt/zenglOX# cd gcc-build root@ubuntu:/mnt/zenglOX/gcc-build# ../gcc-4.9.2/configure --prefix=/mnt/zenglOX/opt/cross --target=i586-elf --enable-languages=c,c++ --disable-nls --without-headers 通过make all-gcc来编译GCC: root@ubuntu:/mnt/zenglOX/gcc-build# make all-gcc 编译成功后,通过make install-gcc来安装GCC: root@ubuntu:/mnt/zenglOX/gcc-build# make install-gcc 安装成功后,应该就可以在/mnt/zenglOX/opt/cross/bin目录中, 看到用于交叉编译的4.9.2版本的GCC的相关可执行文件了: root@ubuntu:/mnt/zenglOX/gcc-build# ls ../opt/cross/bin/ i586-elf-addr2line i586-elf-g++ i586-elf-gprof i586-elf-readelf i586-elf-ar i586-elf-gcc i586-elf-ld i586-elf-size i586-elf-as i586-elf-gcc-4.9.2 i586-elf-ld.bfd i586-elf-strings i586-elf-c++ i586-elf-gcc-ar i586-elf-nm i586-elf-strip i586-elf-c++filt i586-elf-gcc-nm i586-elf-objcopy i586-elf-cpp i586-elf-gcc-ranlib i586-elf-objdump i586-elf-elfedit i586-elf-gcov i586-elf-ranlib 生成gcc后还需要生成对应的libgcc: root@ubuntu:/mnt/zenglOX/gcc-build# make all-target-libgcc root@ubuntu:/mnt/zenglOX/gcc-build# make install-target-libgcc 上面使用make all-target-libgcc命令来编译libgcc, 使用make install-target-libgcc安装libgcc, 编译安装后,可以在opt/cross/lib目录里查看到生成的libgcc: root@ubuntu:/mnt/zenglOX/gcc-build# ls ../opt/cross/lib/gcc/i586-elf/4.9.2/ -l 总用量 476 -rw-r--r-- 1 root root 2432 6月 5 00:37 crtbegin.o -rw-r--r-- 1 root root 1388 6月 5 00:37 crtend.o drwxr-xr-x 2 root root 4096 6月 5 00:37 include drwxr-xr-x 2 root root 4096 6月 5 00:27 include-fixed drwxr-xr-x 3 root root 4096 6月 5 00:34 install-tools -rw-r--r-- 1 root root 417486 6月 5 00:37 libgcc.a -rw-r--r-- 1 root root 44900 6月 5 00:37 libgcov.a drwxr-xr-x 3 root root 4096 6月 5 00:34 plugin root@ubuntu:/mnt/zenglOX/gcc-build# 这样,适用于ubuntu 15.04(也就是gcc 4.9.2的系统环境)的完整的交叉编译工具就生成好了。 ========================================= Qemu 2.3.0的安装 ========================================= 为什么要使用2.3.0的版本,因为,在之前zenglOX v3.1.0版本的官方文章中, 我们提到过,qemu在播放音频数据时,会严重阻塞虚拟CPU指令的执行, 当qemu升级到2.3.0版本后,就不存在这个问题了,这样,即使不开启KVM硬件 加速功能,也可以调试和开发与音频相关的驱动了。 在使用KVM硬件加速功能时,某些断点必须通过gdb的hbreak命令,也就是硬件断点才能 中断下来,因此,在开发阶段,关闭KVM可以方便我们的调试(关闭KVM时,直接用软件断点就可以中断下来), 在开发结束后,再启用KVM进行测试即可。 下面看下ubuntu 15.04系统中,Qemu 2.3.0的安装过程: 先将网盘中的qemu-2.3.0.tar.bz2的压缩包下载到Downloads目录(也可以从Qemu官网下载), 然后解压: zengl@ubuntu:~$ cd Downloads/ zengl@ubuntu:~/Downloads$ ls qemu-2.3.0.tar.bz2 zengl@ubuntu:~/Downloads$ tar xvf qemu-2.3.0.tar.bz2 zengl@ubuntu:~/Downloads$ ls qemu-2.3.0 qemu-2.3.0.tar.bz2 zengl@ubuntu:~/Downloads$ 创建qemu-build-2.3.0: zengl@ubuntu:~/Downloads$ mkdir qemu-build-2.3.0 进入该目录: zengl@ubuntu:~/Downloads$ cd qemu-build-2.3.0/ zengl@ubuntu:~/Downloads/qemu-build-2.3.0$ 在进行配置之前,需要先安装一些依赖项(如果已经安装过,可以跳过): zengl@ubuntu:~/Downloads/qemu-build-2.3.0$ sudo apt-get install libsdl1.2-dev zengl@ubuntu:~/Downloads/qemu-build-2.3.0$ sudo apt-get install autoconf automake libtool zengl@ubuntu:~/Downloads/qemu-build-2.3.0$ sudo apt-get install zlib1g-dev zengl@ubuntu:~/Downloads/qemu-build-2.3.0$ sudo apt-get install libglib2.0-dev 通过之前解压的qemu-2.3.0目录中的configure来进行配置 (配置参数与qemu 2.2.0的配置参数是一样的): zengl@ubuntu:~/Downloads/qemu-build-2.3.0$ ../qemu-2.3.0/configure --target-list=i386-softmmu --enable-debug --disable-pie --enable-sdl --audio-drv-list='oss alsa sdl' 通过make和sudo make install命令来进行编译安装: zengl@ubuntu:~/Downloads/qemu-build-2.3.0$ make zengl@ubuntu:~/Downloads/qemu-build-2.3.0$ sudo make install 安装好后,通过qemu-system-i386 --version来查看版本号信息: zengl@ubuntu:~/Downloads/qemu-build-2.3.0$ qemu-system-i386 --version QEMU emulator version 2.3.0, Copyright (c) 2003-2008 Fabrice Bellard zengl@ubuntu:~/Downloads/qemu-build-2.3.0$ GCC交叉编译环境与Qemu 2.3.0都安装好后,就可以对源代码进行编译测试了: zengl@ubuntu:~/zenglOX/zenglOX_v3.2.0$ make 在make生成zenglOX.bin后,在执行make iso之前,如果是新安装的ubuntu 15.04系统, 那么,还需要安装xorriso: (否则会报grub-mkrescue: warning: Your xorriso doesn't support `--grub2-boot-info'. Some features are disabled. Please use xorriso 1.2.9 or later.. 之类的错误信息) zengl@ubuntu:~/zenglOX/zenglOX_v3.2.0$ sudo apt-get install xorriso 接着,就可以make iso来生成zenglOX.iso的镜像文件了: zengl@ubuntu:~/zenglOX/zenglOX_v3.2.0$ make iso 最后,通过startQemu来启动Qemu: zengl@ubuntu:~/zenglOX/zenglOX_v3.2.0$ chmod +x startQemu zengl@ubuntu:~/zenglOX/zenglOX_v3.2.0$ ./startQemu 在另外一个终端中,通过gdb来连接: zengl@ubuntu:~/zenglOX/zenglOX_v3.2.0$ gdb -q zenglOX.bin Reading symbols from zenglOX.bin...done. (gdb) target remote localhost:1234 Remote debugging using localhost:1234 0x0000fff0 in ?? () (gdb) hb zlox_kernel_main Hardware assisted breakpoint 1 at 0x10003b: file zlox_kernel.c, line 38. (gdb) c Continuing. Breakpoint 1, zlox_kernel_main (mboot_ptr=0x10000, initial_stack=524032) at zlox_kernel.c:38 38 { (gdb) c Continuing. 上面通过 hb zlox_kernel_main 的gdb命令设置了一个硬件断点,因为 startQemu脚本中默认是开启的kvm硬件加速的,你可以根据需要,在开发时, 暂时去掉startQemu里的-enable-kvm参数,在startQemu里有两条qemu启动语句, 最后一条被注释掉了,这两条启动语句的区别仅在于:第一条开启了kvm, 而第二条注释掉的启动语句中,没有开启kvm。因此,可以根据需要,进行选择使用。 ========================================= Other ========================================= 在VMware中,请不要在虚拟机的设置中加入USB Controller, 因为该虚拟机的USB控制器可能会占用掉Sound Blaster 16声卡的中断线,而且, USB控制器就当前版本而言,对VMware和VirtualBox都没有什么太多的意义。 目前,将zenglOX.iso挂载到VMware与VirtualBox中后,也只能测试下除USB以外的其他功能。 如果以后加入了OHCI,EHCI(USB 2.0)及xHCI(USB 3.0)之类的USB控制器的驱动的话, 有可能会起到作用。 另外,作者建议读者使用ubuntustudio-15.04-dvd的镜像来安装系统,因为 标准的Ubuntu Desktop桌面版系统里,qemu的SDL的渲染效果有点模糊,而且有些 渲染上的BUG,比如偶尔会出现一些残留白线的情况。 在Ubuntu Studio的系统里,只要不手动调整qemu的窗口尺寸(也就是让它自行调整窗口尺寸), 那么SDL就可以很清楚的将图像信息显示出来,也没有渲染上的问题。 当然,如果你中间手动调整了qemu窗口的尺寸的话, 也会出现图像有点模糊的情况,以及偶尔会出现的残留白线的情况。 这当然只是作者的一点经验,原因尚不清楚。 在zenglOX源码包里,新增了一个startQemu.bat的文件,这是为windows环境下的qemu进行测试 用的批处理文件,作者不推荐使用windows版的qemu,因为windows下的qemu也会出现图像显示 不清晰,以及偶尔会出现的残留白线的情况,另外执行性能也不如Linux中的qemu。这当然也 只是作者的经验。如果读者没有这样的问题的话,那么就是作者的系统和配置问题了。 在ubuntu studio 15.04的系统中,Gedit编辑器有点问题,也可以说是BUG,光标有时候 会消失,因此,你可以选择其他的GUI编辑器,比如:Geany编辑器。 另外,该系统中,默认的Fcitx输入法系统也工作的不好, 读者可以在语言支持中切换到iBus,切换后需要注销并重新登录。 最后,与USB相关的驱动代码,位于 zlox_usb.c 及 zlox_usb.h 文件中。 与UHCI控制器相关的驱动代码,位于 zlox_uhci.c 及 zlox_uhci.h 文件中。 与USB HUB相关的驱动代码,位于 zlox_usb_hub.c 及 zlox_usb_hub.h 文件中。 与USB键盘相关的驱动代码,位于 zlox_usb_keyboard.c 及 zlox_usb_keyboard.h 文件中。 与USB鼠标相关的驱动代码,位于 zlox_usb_mouse.c 及 zlox_usb_mouse.h 文件中。 USB v1.1的相关标准,可以参考网盘里的usb11_RemovePassword.pdf文件(移除了加密保护,方便复制文件的内容来进行翻译) UHCI控制器相关的内容,可以参考网盘里的uhci11d.pdf文件。 USB鼠标与键盘的相关内容,可以参考网盘里的HID1_11.pdf文件。 注意:如果你想通过U盘来启动你的hobby OS,如果是用的readme.md文件中介绍的grub-install的 方式的话,请不要使用UEFI的方式来启动,可以在主板的BIOS中进行设置,UEFI的启动方式下, GRUB2设置的VBE图形界面就会失效,那就什么都看不到了。在作者的技嘉主板的台式机中, 进入BIOS后,可以通过BIOS Features页面中的OS Type下的Boot Mode Selection来选择, 我一般设置为Legacy Only,它还有两个选项,一个是UEFI and Legacy,一个是UEFI Only,当使用 UEFI and legacy时,还需要在Boot Option中进行选择,因此,为了简单起见,作者就直接使用 的是Legacy Only选项。 时间: 2015年6月6日 作者: zenglong 官网: www.zengl.com