Giter Site home page Giter Site logo

wangzhike / hit-linux-0.11 Goto Github PK

View Code? Open in Web Editor NEW
444.0 14.0 184.0 34.42 MB

网易云课堂选的操作系统课实验的代码及相关记录

Home Page: http://mooc.study.163.com/course/HIT-1000002004?tid=2001329005#/info

C 78.01% Makefile 6.03% Assembly 13.72% Python 1.17% Shell 0.45% C++ 0.62%
oldlinux kernel system-programming 80x86 cprogramming

hit-linux-0.11's Introduction

操作系统代码实现及记录

details: 这是我在网易云课堂选的操作系统所要求的实验的代码及相关记录,授课老师是哈工大的李治军老师,李老师的讲课风格浅入深出,讲得非常好!我作为一个普通一本大学非计算机专业的学生,能接收到这样的教育,得感谢《网易云课堂》,感谢李治军老师。

update: 距离大三学习这门Mooc,已经过去两年了。现在我也算是如愿转到了计算机专业,目前来看自己最擅长的还是嵌入式领域,所以我想从之前停下来的地方开始,真正学好这门课,完成这八个实验,就像李老师所说,完成这八个实验,操作系统才算是入门了。希望自己早日完成这些实验,入门操作系统。 2017.03

0. 实验环境搭建

致谢DeathKing/hit-oslab项目,提供了Ubuntu环境下的实验环境的一键配置脚本及其所需的源代码,工具等材料。我在此基础上进行了一些小改动,使配置脚本可以在Ubuntu 16.04上使用。具体参见Linux 0.11实验环境准备

1. 操作系统的引导

参见操作系统的引导

2. 系统调用

参见系统调用

3. 进程运行轨迹的跟踪与统计

参见进程运行轨迹的跟踪与统计,修改时间片在我本地实验环境效果不明显,弃坑...,以后再研究是怎么回事:(

4. 基于内核栈切换的进程切换

参见基于内核栈切换的进程切换

5. 信号量的实现和应用

参见信号量的实现和应用

6. 地址映射与共享

7. 终端设备的控制

8. proc文件系统的实现

hit-linux-0.11's People

Contributors

wangzhike avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hit-linux-0.11's Issues

实验三的补充

退出的时候不能直接点叉叉,要在Linux0.11的命令行里面输入exit指令,才会有log。因为这个被卡了几天,log一直出不来..................

在run之前的一点补充

在setup之后需要自己在home/oslab/linux下make一下才能进行run,否则会找不到硬盘哦~ 建议up在setup.sh中补充上

mount-hdc 的一点小问题

不知道为什么 有的时候mount-hdc会报错不能创建相应的loop device
但是如果我把bosch给run起来 在加载结束之前mount 就可以成功
很奇怪 如果有类似问题的可以尝试一下

实验询问bootsect.s

你好!我最经也在学这们课程,途中遇到一些问题不知能否向你请教(因为老师好像已经不再答疑了)
请问bootsect.s中的字符串长度是怎么计算的啊?
我更改输出字符串为
msg1: .byte 13,10 .ascii "ZZTos is running..." .byte 13,10,13,10
这个字符串长度只有19
可是我将98行语句更改为
mov cx,#20 ! 显示字符串长度
竟然不能输出完整字符串,请问这是什么问题

大神现在状况

大神,研究完这个,你的后续学习计划是什么?目前从事哪方面工作呢?

困扰啊......

为什么我在64位ubuntu16.04.1上按照说明安装之后,不仅没装上,还破坏了一堆依赖关系,比如libc6-dev,不知道是不是我的使用方式不对......

运行问题

【环境】
AMD64 的 win 10 WSL Ubuntu 18.04

【现象】
执行 cd ~/oslab/linux-0.11 && make
tony@LAPTOP-4GEHEVKJ:~/oslab/linux-0.11$ make
as86 -0 -a -o boot/bootsect.o boot/bootsect.s
ld86 -0 -s -o boot/bootsect boot/bootsect.o
as86 -0 -a -o boot/setup.o boot/setup.s
ld86 -0 -s -o boot/setup boot/setup.o
gcc-3.4 -m32 -g -I./include -traditional -c boot/head.s
mv head.o boot/
gcc-3.4 -march=i386 -m32 -g -Wall -O2 -fomit-frame-pointer
-nostdinc -Iinclude -c -o init/main.o init/main.c
init/main.c:23: warning: static declaration of 'fork' follows non-static declaration
include/unistd.h:210: warning: previous declaration of 'fork' was here
init/main.c:24: warning: static declaration of 'pause' follows non-static declaration
include/unistd.h:224: warning: previous declaration of 'pause' was here
init/main.c:26: warning: static declaration of 'sync' follows non-static declaration
include/unistd.h:235: warning: previous declaration of 'sync' was here
init/main.c:105: warning: return type of 'main' is not int' (cd kernel; make) make[1]: Entering directory '/home/tony/oslab/linux-0.11/kernel' gcc-3.4 -march=i386 -m32 -g -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -I../include \ -c -o sched.o sched.c as --32 -o system_call.o system_call.s system_call.s: Assembler messages: system_call.s:94: Warning: indirect call without '
gcc-3.4 -march=i386 -m32 -g -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -I../include
-c -o traps.o traps.c
In file included from traps.c:13:
../include/string.h:129: warning: conflicting types for built-in function 'strchr'
../include/string.h:146: warning: conflicting types for built-in function 'strrchr'
../include/string.h:401: warning: conflicting types for built-in function 'memset'
as --32 -o asm.o asm.s
gcc-3.4 -march=i386 -m32 -g -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -I../include
-c -o fork.o fork.c
gcc-3.4 -march=i386 -m32 -g -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -I../include
-c -o panic.o panic.c
gcc-3.4 -march=i386 -m32 -g -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -I../include
-c -o printk.o printk.c
gcc-3.4 -march=i386 -m32 -g -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -I../include
-c -o vsprintf.o vsprintf.c
In file included from vsprintf.c:13:
../include/string.h:129: warning: conflicting types for built-in function 'strchr'
../include/string.h:146: warning: conflicting types for built-in function 'strrchr'
../include/string.h:401: warning: conflicting types for built-in function 'memset'
gcc-3.4 -march=i386 -m32 -g -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -I../include
-c -o sys.o sys.c
gcc-3.4 -march=i386 -m32 -g -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -I../include
-c -o exit.o exit.c
gcc-3.4 -march=i386 -m32 -g -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -I../include
-c -o signal.o signal.c
gcc-3.4 -march=i386 -m32 -g -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -I../include
-c -o mktime.o mktime.c
ld -m elf_i386 -r -o kernel.o sched.o system_call.o traps.o asm.o fork.o panic.o printk.o vsprintf.o sys.o exit.o signal.o mktime.o
sync
make[1]: Leaving directory '/home/tony/oslab/linux-0.11/kernel'
(cd mm; make)
make[1]: Entering directory '/home/tony/oslab/linux-0.11/mm'
gcc-3.4 -march=i386 -m32 -g -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -I../include
-c -o memory.o memory.c
as --32 -o page.o page.s
ld -m elf_i386 -r -o mm.o memory.o page.o
make[1]: Leaving directory '/home/tony/oslab/linux-0.11/mm'
(cd fs; make)
make[1]: Entering directory '/home/tony/oslab/linux-0.11/fs'
gcc-3.4 -march=i386 -m32 -g -Wall -fstrength-reduce -fomit-frame-pointer -nostdinc -I../include
-c -o open.o open.c
gcc-3.4 -march=i386 -m32 -g -Wall -fstrength-reduce -fomit-frame-pointer -nostdinc -I../include
-c -o read_write.o read_write.c
gcc-3.4 -march=i386 -m32 -g -Wall -fstrength-reduce -fomit-frame-pointer -nostdinc -I../include
-c -o inode.o inode.c
In file included from inode.c:7:
../include/string.h:129: warning: conflicting types for built-in function 'strchr'
../include/string.h:146: warning: conflicting types for built-in function 'strrchr'
../include/string.h:401: warning: conflicting types for built-in function 'memset'
gcc-3.4 -march=i386 -m32 -g -Wall -fstrength-reduce -fomit-frame-pointer -nostdinc -I../include
-c -o file_table.o file_table.c
gcc-3.4 -march=i386 -m32 -g -Wall -fstrength-reduce -fomit-frame-pointer -nostdinc -I../include
-c -o buffer.o buffer.c
gcc-3.4 -march=i386 -m32 -g -Wall -fstrength-reduce -fomit-frame-pointer -nostdinc -I../include
-c -o super.o super.c
gcc-3.4 -march=i386 -m32 -g -Wall -fstrength-reduce -fomit-frame-pointer -nostdinc -I../include
-c -o block_dev.o block_dev.c
gcc-3.4 -march=i386 -m32 -g -Wall -fstrength-reduce -fomit-frame-pointer -nostdinc -I../include
-c -o char_dev.o char_dev.c
gcc-3.4 -march=i386 -m32 -g -Wall -fstrength-reduce -fomit-frame-pointer -nostdinc -I../include
-c -o file_dev.o file_dev.c
gcc-3.4 -march=i386 -m32 -g -Wall -fstrength-reduce -fomit-frame-pointer -nostdinc -I../include
-c -o stat.o stat.c
gcc-3.4 -march=i386 -m32 -g -Wall -fstrength-reduce -fomit-frame-pointer -nostdinc -I../include
-c -o exec.o exec.c
In file included from exec.c:21:
../include/string.h:129: warning: conflicting types for built-in function 'strchr'
../include/string.h:146: warning: conflicting types for built-in function 'strrchr'
../include/string.h:401: warning: conflicting types for built-in function 'memset'
exec.c: In function copy_strings': exec.c:140: warning: use of cast expressions as lvalues is deprecated gcc-3.4 -march=i386 -m32 -g -Wall -fstrength-reduce -fomit-frame-pointer -nostdinc -I../include \ -c -o pipe.o pipe.c gcc-3.4 -march=i386 -m32 -g -Wall -fstrength-reduce -fomit-frame-pointer -nostdinc -I../include \ -c -o namei.o namei.c In file included from namei.c:15: ../include/string.h:129: warning: conflicting types for built-in function 'strchr' ../include/string.h:146: warning: conflicting types for built-in function 'strrchr' ../include/string.h:401: warning: conflicting types for built-in function 'memset' gcc-3.4 -march=i386 -m32 -g -Wall -fstrength-reduce -fomit-frame-pointer -nostdinc -I../include \ -c -o bitmap.o bitmap.c In file included from bitmap.c:8: ../include/string.h:129: warning: conflicting types for built-in function 'strchr' ../include/string.h:146: warning: conflicting types for built-in function 'strrchr' ../include/string.h:401: warning: conflicting types for built-in function 'memset' gcc-3.4 -march=i386 -m32 -g -Wall -fstrength-reduce -fomit-frame-pointer -nostdinc -I../include \ -c -o fcntl.o fcntl.c gcc-3.4 -march=i386 -m32 -g -Wall -fstrength-reduce -fomit-frame-pointer -nostdinc -I../include \ -c -o ioctl.o ioctl.c gcc-3.4 -march=i386 -m32 -g -Wall -fstrength-reduce -fomit-frame-pointer -nostdinc -I../include \ -c -o truncate.o truncate.c ld -m elf_i386 -r -o fs.o open.o read_write.o inode.o file_table.o buffer.o super.o block_dev.o char_dev.o file_dev.o stat.o exec.o pipe.o namei.o bitmap.o fcntl.o ioctl.o truncate.o make[1]: Leaving directory '/home/tony/oslab/linux-0.11/fs' (cd kernel/blk_drv; make) make[1]: Entering directory '/home/tony/oslab/linux-0.11/kernel/blk_drv' gcc-3.4 -march=i386 -m32 -g -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -I../../include \ -c -o ll_rw_blk.o ll_rw_blk.c gcc-3.4 -march=i386 -m32 -g -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -I../../include \ -c -o floppy.o floppy.c gcc-3.4 -march=i386 -m32 -g -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -I../../include \ -c -o hd.o hd.c gcc-3.4 -march=i386 -m32 -g -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -I../../include \ -c -o ramdisk.o ramdisk.c In file included from ramdisk.c:7: ../../include/string.h:129: warning: conflicting types for built-in function 'strchr' ../../include/string.h:146: warning: conflicting types for built-in function 'strrchr' ../../include/string.h:401: warning: conflicting types for built-in function 'memset' ar rcs blk_drv.a ll_rw_blk.o floppy.o hd.o ramdisk.o sync make[1]: Leaving directory '/home/tony/oslab/linux-0.11/kernel/blk_drv' (cd kernel/chr_drv; make) make[1]: Entering directory '/home/tony/oslab/linux-0.11/kernel/chr_drv' gcc-3.4 -march=i386 -m32 -g -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -I../../include \ -c -o tty_io.o tty_io.c tty_io.c: In function copy_to_cooked':
tty_io.c:160: warning: subscript has type char' tty_io.c: In function tty_write':
tty_io.c:316: warning: subscript has type char' gcc-3.4 -march=i386 -m32 -g -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -I../../include \ -c -o console.o console.c gcc-3.4 -m32 -g -E -nostdinc -I../../include -traditional keyboard.S -o keyboard.s as --32 -o keyboard.o keyboard.s keyboard.S: Assembler messages: keyboard.S:53: Warning: indirect call without
'
gcc-3.4 -march=i386 -m32 -g -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -I../../include
-c -o serial.o serial.c
as --32 -o rs_io.o rs_io.s
rs_io.s: Assembler messages:
rs_io.s:65: Warning: indirect call without *' gcc-3.4 -march=i386 -m32 -g -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -I../../include \ -c -o tty_ioctl.o tty_ioctl.c ar rcs chr_drv.a tty_io.o console.o keyboard.o serial.o rs_io.o tty_ioctl.o sync make[1]: Leaving directory '/home/tony/oslab/linux-0.11/kernel/chr_drv' (cd kernel/math; make) make[1]: Entering directory '/home/tony/oslab/linux-0.11/kernel/math' gcc-3.4 -march=i386 -m32 -g -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -I../../include \ -c -o math_emulate.o math_emulate.c ar rcs math.a math_emulate.o sync make[1]: Leaving directory '/home/tony/oslab/linux-0.11/kernel/math' (cd lib; make) make[1]: Entering directory '/home/tony/oslab/linux-0.11/lib' gcc-3.4 -march=i386 -m32 -g -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -I../include \ -c -o ctype.o ctype.c gcc-3.4 -march=i386 -m32 -g -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -I../include \ -c -o _exit.o _exit.c _exit.c: In function _exit':
_exit.c:13: warning: noreturn' function does return gcc-3.4 -march=i386 -m32 -g -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -I../include \ -c -o open.o open.c gcc-3.4 -march=i386 -m32 -g -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -I../include \ -c -o close.o close.c gcc-3.4 -march=i386 -m32 -g -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -I../include \ -c -o errno.o errno.c gcc-3.4 -march=i386 -m32 -g -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -I../include \ -c -o write.o write.c gcc-3.4 -march=i386 -m32 -g -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -I../include \ -c -o dup.o dup.c gcc-3.4 -march=i386 -m32 -g -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -I../include \ -c -o setsid.o setsid.c gcc-3.4 -march=i386 -m32 -g -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -I../include \ -c -o execve.o execve.c gcc-3.4 -march=i386 -m32 -g -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -I../include \ -c -o wait.o wait.c gcc-3.4 -march=i386 -m32 -g -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -I../include \ -c -o string.o string.c In file included from string.c:14: ../include/string.h:129: warning: conflicting types for built-in function 'strchr' ../include/string.h:146: warning: conflicting types for built-in function 'strrchr' ../include/string.h:401: warning: conflicting types for built-in function 'memset' ../include/string.h:39: warning: 'strncpy' defined but not used ../include/string.h:69: warning: 'strncat' defined but not used ../include/string.h:108: warning: 'strncmp' defined but not used ../include/string.h:129: warning: 'strchr' defined but not used ../include/string.h:146: warning: 'strrchr' defined but not used ../include/string.h:369: warning: 'memcmp' defined but not used ../include/string.h:401: warning: 'memset' defined but not used gcc-3.4 -march=i386 -m32 -g -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -I../include \ -c -o malloc.o malloc.c malloc.c: In function malloc':
malloc.c:156: warning: use of cast expressions as lvalues is deprecated
ar rcs lib.a ctype.o _exit.o open.o close.o errno.o write.o dup.o setsid.o execve.o wait.o string.o malloc.o
sync
make[1]: Leaving directory '/home/tony/oslab/linux-0.11/lib'
ld -m elf_i386 -Ttext 0 -e startup_32 boot/head.o init/main.o
kernel/kernel.o mm/mm.o fs/fs.o
kernel/blk_drv/blk_drv.a kernel/chr_drv/chr_drv.a
kernel/math/math.a
lib/lib.a
-o tools/system
nm tools/system | grep -v '(compiled)|(.o$)|( [aU] )|(..ng$)|(LASH[RL]DI)'| sort > System.map
gcc -m32 -g -Wall -O2 -fomit-frame-pointer
-o tools/build tools/build.c
cp -f tools/system system.tmp
strip system.tmp
objcopy -O binary -R .note -R .comment system.tmp tools/kernel
tools/build boot/bootsect boot/setup tools/kernel > Image
/bin/sh: 1: tools/build: Exec format error
Makefile:42: recipe for target 'Image' failed
make: *** [Image] Error 2

内核make成功后,run出现缺失文件错误 dpkg查不了

系统:Ubuntu 20.04 LTS
目录:

aaron@razer:~/oslab$ ls
bochs  files  hdc  hdc-0.11.img  linux-0.11  linux-0.11.tar.gz  mount-hdc  run

错误信息:

aaron@razer:~/oslab$ ./run
========================================================================

                       Bochs x86 Emulator 2.6.11
              Built from SVN snapshot on January 5, 2020
                Timestamp: Sun Jan  5 08:36:00 CET 2020

========================================================================
00000000000i[      ] LTDL_LIBRARY_PATH not set. using compile time default '/usr/lib/bochs/plugins'
00000000000i[      ] BXSHARE not set. using compile time default '/usr/share/bochs'
00000000000i[      ] lt_dlhandle is 0x5634a680bca0
00000000000i[PLUGIN] loaded plugin libbx_unmapped.so
00000000000i[      ] lt_dlhandle is 0x5634a680cbc0
00000000000i[PLUGIN] loaded plugin libbx_biosdev.so
00000000000i[      ] lt_dlhandle is 0x5634a6810930
00000000000i[PLUGIN] loaded plugin libbx_speaker.so
00000000000i[      ] lt_dlhandle is 0x5634a6812700
00000000000i[PLUGIN] loaded plugin libbx_extfpuirq.so
00000000000i[      ] lt_dlhandle is 0x5634a6812ed0
00000000000i[PLUGIN] loaded plugin libbx_parallel.so
00000000000i[      ] lt_dlhandle is 0x5634a6814b30
00000000000i[PLUGIN] loaded plugin libbx_serial.so
00000000000i[      ] lt_dlhandle is 0x5634a6818f30
00000000000i[PLUGIN] loaded plugin libbx_gameport.so
00000000000i[      ] lt_dlhandle is 0x5634a6819760
00000000000i[PLUGIN] loaded plugin libbx_iodebug.so
00000000000i[      ] reading configuration from ./bochs/bochsrc.bxrc
00000000000i[      ] lt_dlhandle is (nil)
00000000000p[      ] >>PANIC<< dlopen failed for module 'vga_update_interval' (libbx_vga_update_interval.so): file not found
00000000000e[SIM   ] notify called, but no bxevent_callback function is registered

00000000000e[SIM   ] notify called, but no bxevent_callback function is registered
========================================================================

Bochs is exiting with the following message:

[      ] dlopen failed for module 'vga_update_interval' (libbx_vga_update_interval.so): file not found
========================================================================

00000000000i[SIM   ] quit_sim called with exit code 1

尝试解决:
aaron@razer:~/oslab$ dpkg -S libbx_vga_update_interval.so
dpkg-query: 没有找到与 libbx_vga_update_interval.so 相匹配的路径

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.