⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readme.txt

📁 gerneral os development
💻 TXT
字号:
OSD demo code - Interim release (January, 2003)I am working a new set of kernels, but it's slow going, so hereare the old kernels with some bug fixes and improvements.Location of these files: http://www.execpc.com/~geezer/osd/codeThe GRUB bootloader is GPL, all other files are PUBLIC DOMAIN(no copyright). You may do whatever you want with them.================================================================QUICK START================================================================1. Make sure you have all the software tools you need. You need NASM:        http://nasm.sourceforge.net   You need the GNU C compiler (GCC), including binutils, GNU Make,   and sed. Users of DOS and Win9x should get GCC for DOS (DJGPP):        http://www.delorie.com/djgpp   Find a mirror site near you and download the following   packages (NNN is version number):        compiler        v2gnu/gccNNNNb.zip        binutils        v2gnu/bnuNNNNb.zip        libraries       v2/djdevNNN.zip        Make            v2gnu/makNNNNb.zip        sed             v2gnu/sedNNb.zip        CWSDPMI         v2misc/csdpmiN.zip   Users of WinNT/Win2000/WinXP should get GCC for Win32 (MinGW):        http://mingw.sourceforge.net   Users of Linux can use the GNU tools that come with Linux. If   they're not already installed, check the CD-ROMs or FTP site   from where you got Linux.   DOS and Windows users also need John Fine's Partial Copy (PARTCOPY):        http://www.execpc.com/~geezer/johnfine/#zero2. Create a formatted floppy disk with the GRUB bootloader   installed on it. The procedure to do this is described below.3. Got your tools? Got your GRUB floppy? Then you're ready to   build and install the demo kernels.   If you're using DJGPP, type          make -f dj.mak install   If you're using MinGW, type          make -f ming.mak install   If you're using Linux, type          make -f linux.mak installHopefully, everything will work properly. If it does, you'll beleft with a bootable GRUB floppy with 7 demo kernels on it(OSD 3 - OSD 9).================================================================MAKING A BOOTABLE FLOPPY DISK WITH THE GRUB BOOTLOADER ON IT================================================================GRUB is a GPLed bootloader.Home page:      http://www.gnu.org/software/grubBinaries:       ftp://alpha.gnu.org/gnu/grub/grub-0.90-i386-pc.tar.gzSource code:    ftp://alpha.gnu.org/gnu/grub/grub-0.90.tar.gzHOW-TOs:        http://www.washingdishes.freeuk.com/grubtut.html                http://www.execpc.com/~geezer/osd/boot/grub-how.txt1. You will need   - Two 1.44 meg floppy disks, one of them formatted with a     filesystem that GRUB recognizes (e.g. FAT12 or ext2).     The other floppy (the "unformatted" floppy) may contain     a filesystem, but it will be destroyed.   - The GRUB binaries: files "stage1" and "stage2". These are     in the OSD distribution, in the directory "boot/grub".   - A "menu.lst" configuration file for GRUB. Again, this     is provided with OSD in the "boot/grub" directory.2. On the formatted floppy disk, create the subdirectory   "/boot/grub/", and copy the files "stage1", "stage2", and   "menu.lst" into this subdirectory.3. Concatenate the binary files "stage1" and "stage2" into a   single binary file named "boot":	(DOS/Windows):  copy /b stage1 + stage2 boot	(Linux):        cat stage1 stage2 >boot4. Write the file "boot" directly to the unformatted floppy.   This is a sector-level write that does not use (and will   destroy) any filesystem present on the disk:	(DOS/Windows):  partcopy boot 0 168000 -f0	(Linux):        cat boot >/dev/fd0   PARTCOPY will display an error message because "boot" is   much shorter than 0x168000 bytes, but this is OK.5. Boot your PC from the unformatted floppy disk.6. After GRUB has started, eject the unformatted floppy and   insert the formatted floppy, containing the "stage1",   "stage2", and "menu.lst" files, all in the "/boot/grub/"   subdirectory. Type:	setup (fd0)7. The formatted floppy is now bootable. Do not move, modify,   or delete the file "/boot/grub/stage2" on this floppy.================================================================BUGS/GOTCHAS/"IT DOESN'T WORK!"================================================================- DJGPP crashes under Windows XP  The DJGPP team is working on a way to fix this. If you have  any flavor of WindowsNT (including WindowsXP) use MinGW  instead of DJGPP.- Will CygWin work instead of MinGW?  Probably, but I haven't tested it.- 'make -f ming.mak clean' doesn't delete .o files in /lib/   I know, but I can't figure out how to fix it. Make sure   these files get deleted if you switch between MinGW and   DJGPP. The linkers can't distinguish between DJGPP COFF   .o files and Win32 PE COFF .o files, but they ARE different,   and your kernels will crash if you mix the two COFF types.- BFD: Dwarf Error: Abbrev offset (1075154) greater than or    equal to .debug_abbrev size (3198).  This is a bug in new versions of DJGPP. It's ugly, but you  can ignore it.- Do not use MinGW GCC 2.x with NASM    MinGW based on GCC 2.95.2 stores the BSS size in the wrong    field of the section header. Because of this bug, this    version of MinGW will not interoperate with other toolchains,    including NASM, Microsoft compilers, and Borland compilers.- Screen fills with errors when compiling under Linux    There are two possible causes for this:    1. Linux GCC chokes on DOS-style newlines in the source code.       Run all source code files and makefiles through 'fromdos'       to convert the DOS newlines (CR-LF) to UNIX newlines (LF).    2. There is no newline at the very end of the file.- ld: krnl.x: Not enough room for program headers, try linking with -N    This error occurs if you do not use AT() in the linker script    when making an ELF kernel.- Exception 10 (bad TSS)    If the NT bit in the EFLAGS register is set, IRET will attempt    a TSS-based task-switch, instead of a normal IRET. Code was    added to osd9/kstart.asm to prevent this. (GRUB 0.90 leaves    the NT bit set when it jumps to the kernel.)- Errors from GRUB:  'Error: Loading below 1M not supported'  'Error 28: Selected item won't fit into memory'   These errors are usually caused by improperly-linked ELF   kernels. If your kernel is ELF, try this:        objdump --private-headers -h krnl.x   The vaddr and paddr fields for each program header (segment)   must be at or above 1 meg (00100000h) but smaller than your   RAM size. If you have readelf, you can also do this:	readelf --segments krnl.x   If you find a segment with bad values of VirtAddr or   PhysAddr, look at the section-to-segment mapping to see   which section is causing the problem.================================================================DEMO CODE OVERVIEW================================================================osd3    mixing C and asm, C calling convention, underscores        (xxx - current code does not demonstrate these very well)osd4    putch() and kprintf()osd5    C library code moved to separate directoryosd6    software interrupts, exception handlers in asm and Cosd7    hardware interrupts, reprogramming the 8259 interrupt        controller chips, simple keyboard driverosd8    multitasking preliminaries: multiple (virtual) consoles        backed with video memory, ANSI/VT escapes for moving	the cursor and changing text color. Improved keyboard	driver; can press Ctrl+Alt+Del to reboot.osd9    cooperative multitasking with setjmp() and longjump()        (static tasks; linked into the kernel at compile-time)================================================================WHAT CHANGED?================================================================- Updated GRUB to version 0.90- Wrote MinGW makefiles, and fixed code to work with MinGW  based on GCC 3.x (and generate error message for GCC 2.x)- Fixed definition of MAKEFILE in lib/linux.mak- BIG changes to linker script  - Unified ELF/DJGPP COFF/Win32 PE COFF linker scripts into one  - Added AT() statements so ELF kernels link properly, and    work properly  - Now handling .rodata section properly, so ELF kernels work    properly (including multiple .rodata sections with GCC 3.x)- Rewrote setjmp() and longjmp() because they were buggy (though,  strangely enough, the bug did not manifest itself)- Added code to osd9/kstart.asm to zero NT bit in EFLAGS,  preventing exception 10- Now enabling interrupts for each task in function init_tasks()  of osd9/sched.c. In previous code, interrupts were disabled  for all tasks except the idle task, making the blinking  character in the upper left corner of the screen appear to  blink much more slowly than 18 Hz.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -