# Linux 0.11 Lab
**Repository Path**: jianjun_xia/linux-0.11-lab
## Basic Information
- **Project Name**: Linux 0.11 Lab
- **Description**: Linux 0.11 内核实验室 —— 基于 Docker/Qemu/Bochs 的极速 Linux 0.11 内核学习和开发环境。
- **Primary Language**: Shell
- **License**: GPL-2.0
- **Default Branch**: master
- **Homepage**: http://tinylab.org/linux-0.11-lab
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 46
- **Created**: 2020-01-06
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
**Subscribe Wechat**:

Linux 0.11 Lab
==============
The old Linux kernel source version [0.11](http://oldlinux.org) and the integrated experiment environment.
[CS630 Qemu Lab](https://gitee.com/tinylab/cs630-qemu-lab) is a related project, it is a friendly learning environment for the X86 assembly course: [CS630](http://www.cs.usfca.edu/%7Ecruse/cs630f06/).
If you want to learn the latest [Linux Kernel](http://www.kernel.org), please try our [Linux Lab](https://gitee.com/tinylab/linux-lab)
[](http://showdesk.io/2017-03-18-17-54-23-linux-0.11-lab-usage-00-06-42/)
## Contents
- [Introduction](#introduction)
- [Install the environment](#install-the-environment)
- [Hack Linux 0.11](#hack-linux-011)
- [Hack Rootfs](#hack-rootfs)
- [RAM image](#ram-image)
- [Floppy image](#floppy-image)
- [Harddisk image](#harddisk-image)
- [Examples](#examples)
- [Changes](#changes)
- [Contact and Sponsor](#contact-and-sponsor)
## Introduction
- Basic information
- Homepage:
- Repository:
- Features
- compilable with many different versions of Gcc.
- has been tested under modern Linux, Mac OS X and even work on Windows (with docker support).
- add bulit-in qemu and bochs support, include running and debugging.
- integrate different prebuilt rootfs (floopy, ramdisk and harddisk).
- allow to generate callgraph of every specified function
## Install the environment
Linux 0.11 Lab works on Linux, Windows and Mac OSX, but please install docker at first, then simply install the environment with these three commands:
$ git clone https://gitee.com/tinylab/cloud-lab.git
$ cd cloud-lab/
$ tools/docker/run linux-0.11-lab
## Install docker
Docker is required by Linux 0.11 Lab, please install it at first:
- Linux, Mac OSX, Windows 10: [Docker CE](https://store.docker.com/search?type=edition&offering=community)
- older Windows: [Docker Toolbox](https://www.docker.com/docker-toolbox) or Virtualbox/Vmware + Linux.
Notes:
In order to run docker without password, please make sure your user is added in the docker group:
$ sudo usermod -aG docker $USER
In order to speedup docker images downloading, please configure a local docker mirror in `/etc/default/docker`, for example:
$ grep registry-mirror /etc/default/docker
DOCKER_OPTS="$DOCKER_OPTS --registry-mirror=https://docker.mirrors.ustc.edu.cn"
$ service docker restart
In order to avoid network ip address conflict, please try following changes and restart docker:
$ grep bip /etc/default/docker
DOCKER_OPTS="$DOCKER_OPTS --bip=10.66.0.10/16"
$ service docker restart
If the above changes not work, try something as following:
$ grep dockerd /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --bip=10.66.0.10/16 --registry-mirror=https://docker.mirrors.ustc.edu.cn
$ service docker restart
If still have errors like 'Client.Timeout exceeded while waiting headers', please try the other docker mirror sites:
* Aliyun (Register Required):
* Docker China: https://registry.docker-cn.com
Configuration in Ubuntu:
$ echo "DOCKER_OPTS=\"\$DOCKER_OPTS --registry-mirror=\"" | sudo tee -a /etc/default/docker
$ sudo service docker restart
For Ubuntu 12.04, please install the new kernel at first, otherwise, docker will not work:
$ sudo apt-get install linux-generic-lts-trusty
If installed via Docker Toolbox, please enter into the `/mnt/sda1` directory of the `default` system on Virtualbox, otherwise, after poweroff, the data will be lost for the default `/root` directory is only mounted in DRAM.
$ cd /mnt/sda1
For Linux or Mac OSX, please simply choose one directory in `~/Downloads` or `~/Documents`.
$ cd ~/Documents
## Older method
Here is the deprecated method in Linux system:
* The Linux distributions: debian and ubuntu (>= 14.04) are recommended
* Install basic tools
$ sudo apt-get install vim cscope exuberant-ctags build-essential qemu lxterminal
* Optional
$ sudo apt-get install bochs vgabios bochsbios bochs-doc bochs-x libltdl7 bochs-sdl bochs-term
$ sudo apt-get install graphviz cflow
## Hack Linux 0.11
**Note** To enable kvm speedup for hardisk boot, please make sure cpu virtualization is enabled in bios features.
$ make help // get help
$ make // compile
$ make boot-hd // boot it on qemu with hard disk image
$ make boot-hd G=0 // Use curses based terminal instead of graphics, friendly for ssh login, exit with 'ESC+2 quit' or 'ALT+2 quit'
$ make switch // switch to another emulator, between qemu and bochs
Switch to use emulator: bochs
$ make boot VM=qemu|bochs // specify the emulator, between qemu and bochs
// edit .kernel_gdbinit(for kernel.sym) and .boot_gdbinit(for bootsect.sym and setup.sym) before debugging
$ make debug-hd // debug kernel.sym via qemu and start gdb automatically to connect it.
$ make debug-hd DST=src/boot/bootsect.sym // debug bootsect, can not debug code after ljmp
$ make debug-hd DST=src/boot/setup.sym // debug setup, can not debug after ljmp
## Hack Rootfs
Three different root filesystem images are stored in `rootfs/`:
* rootram.img -- RAM image
* rootimage -- Floppy image
* hdc-0.11.img-- Harddisk image
### Ram image
`rootram.img` is mountable directly:
$ mkdir /path/to/rootram/
$ sudo mount rootfs/rootram.img /path/to/rootram/
A new target `ramfs-install` is added to install files from `examples/` to ramfs.
$ make ramfs-install
### Floppy image
`rootimage-0.11` is a minix filesystem, must with `-t minix` obviously:
$ sudo mkdir /path/to/rootimage/
$ sudo mount -t minix rootfs/rootimage-0.11 /path/to/rootimage
A new target `flp-install` is added to install files from `examples/` to floppy image.
$ make flp-install
### Harddisk image
`hdc-0.11.img` has a partition table, should be mounted with an offset:
$ mkdir /path/to/hdc/
$ fdisk -lu rootfs/hdc-0.11.img
$ fdisk -l rootfs/hdc-0.11.img
Disk rootfs/hdc-0.11.img: 127 MB, 127631360 bytes
16 heads, 38 sectors/track, 410 cylinders, total 249280 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
rootfs/hdc-0.11.img1 2 124031 62015 81 Minix / old Linux
rootfs/hdc-0.11.img2 124032 248063 62016 81 Minix / old Linux
$ sudo mount -o offset=$((2*512)) rootfs/hdc-0.11.img /path/to/hdc/
A new target `hda-install` is added to install files from `examples/` to harddisk image.
$ make hda-install
## Examples
Some examples are stored in `examples/` with their own README.md:
### Syscall -- shows how to add a new system call
A new demonstration is added: [Linux 0.11 Lab: Add a new syscall into Linux 0.11](http://showterm.io/4b628301d2d45936a7f8a)
Host:
$ patch -p1 < examples/syscall/syscall.patch
$ make start-hd
Emulator:
$ cd examples/syscall/
$ make
as -o syscall.o syscall.s
ld -o syscall syscall.o
./syscall
Hello, Linux 0.11
### Linux 0.00
Host:
$ make boot-hd
Emulator:
$ cd examples/linux-0.00
$ make
$ sync
Host:
$ make linux-0.00
### Building Linux 0.11 in Linux 0.11
Host:
$ make boot-hd
Emulator:
$ cd examples/linux-0.11
$ make
$ sync
Host:
$ make hd-boot
## Changes
* 2015-03-15, falcon
* launch a linux-0.11-lab project, see
* integrate prebuilt rootfs images, no need to install extra images
* integrate both qemu and bochs support and simplify the testing on emulators
* add callgraph generation support
* add docker support, allow to build the whole lab with one command
* rewrite the document: README.md
* Fix up "Reset-floppy Called"
* clean up everything
* repo:
* 2012-04-30, yuanxinyu
* add Mac OS X support
* add latest Gcc support
* repo:
* 2011-07-31, tigercn
* port to new system and gcc
* see:
* 2008-10-15, falcon
* add gcc 4.3.2 with 32/64bit host support
* rewrite boot/{bootsect.s,setup.s} with AT&T
* replace tools/build.c with tools/build.sh
* see:
* 2005, jiong.zhao
* write a [book for Linux 0.11](http://www.oldlinux.org/download/clk011c-3.0.pdf)
* release a version for RedHat 9 with rootfs, compilers and blabla
* site:
* 1991, Linus
* write and release the original Linux 0.11.
## Contact and Sponsor
Our contact wechat is **tinylab**, welcome to join our user & developer discussion group.
** Contact us and Sponsor via wechat **
