Download Latest Version zenglOX.iso (5.1 MB)
Email in envelope

Get an email when there's a new version of zenglox

Home / zenglOX_v3.2.0
Name Modified Size InfoDownloads / 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
Source: readme.txt, updated 2015-06-06