Run semu inside web browser via WebAssembly translation #38
Open
Description
WebAssembly is capable to port rv32emu to browser. Then, I would like to test the WebAssembly translation of the semu codebase to see if kernels (like Linux or xv6) can be booted in a browser in order to facilitate the further integration of semu to rv32emu.
I would like to start with the smaller codebase and boot xv6 first. A few technical points are as follows:
- It is necessary to simulate a new shell that is operating in a web frontend (Xterm.js is a good solution), after which the command is forwarded to the kernel's running shell. Some of the scope issues with the variables generated by Emscripten are confusing to me, so that I have implemented a hardcoded
ls
command to confirm the kernel is booted successfully. The demo below shows Emscripten's capability to boot a kernel. - The
sh
shell's dollar sign ($) of xv6 does not flush after exec, possibly some source kernel code needs to be changed.
Demo: xv6
You shall see output of ls
command like below:
$ . 1 1 1024
.. 1 1 1024
README 2 2 2059
cat 2 3 25016
echo 2 4 23800
forktest 2 5 13688
grep 2 6 28568
init 2 7 24896
kill 2 8 23752
ln 2 9 23704
ls 2 10 27320
mkdir 2 11 23856
rm 2 12 23840
sh 2 13 43824
stressfs 2 14 24864
usertests 2 15 159064
grind 2 16 39424
wc 2 17 26208
zombie 2 18 23224
console 3 19 0
Next, command bridging from web frontend shell(Xterm.js) to real shell will be solved, and then boot the Linux kernel.
Metadata
Assignees
Labels
No labels