forked from koniifer/ableos
repbuild: generate disk image with limine
This commit is contained in:
parent
643db212ef
commit
346d3a9166
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -1,6 +1,8 @@
|
||||||
userland/root_fs/mnt/
|
|
||||||
target/
|
target/
|
||||||
.gdb_history
|
.gdb_history
|
||||||
!*/.gitkeep
|
!*/.gitkeep
|
||||||
__pycache__/
|
__pycache__/
|
||||||
debug.log
|
debug.log
|
||||||
|
/disk/
|
||||||
|
/limine/
|
||||||
|
/disk.img
|
||||||
|
|
|
@ -8,7 +8,6 @@ build-std-features = ["compiler-builtins-mem"]
|
||||||
|
|
||||||
[target.'cfg(target_arch = "x86_64")']
|
[target.'cfg(target_arch = "x86_64")']
|
||||||
rustflags = ["-C", "target-feature=+rdrand"]
|
rustflags = ["-C", "target-feature=+rdrand"]
|
||||||
runner = "bootimage runner"
|
|
||||||
|
|
||||||
[target.riscv64gc-unknown-none-elf]
|
[target.riscv64gc-unknown-none-elf]
|
||||||
rustflags = "-C link-arg=-Tableos/src/arch/riscv/virt.lds"
|
rustflags = "-C link-arg=-Tableos/src/arch/riscv/virt.lds"
|
||||||
|
|
|
@ -8,52 +8,6 @@ version = "0.1.1"
|
||||||
panic = "abort"
|
panic = "abort"
|
||||||
|
|
||||||
[package.metadata.bootimage]
|
[package.metadata.bootimage]
|
||||||
run-command = [
|
|
||||||
"qemu-system-x86_64",
|
|
||||||
|
|
||||||
"-device",
|
|
||||||
"piix4-ide,id=ide",
|
|
||||||
|
|
||||||
"-drive",
|
|
||||||
"file={},format=raw,if=none,id=disk",
|
|
||||||
|
|
||||||
"-device",
|
|
||||||
"ide-hd,drive=disk,bus=ide.0"
|
|
||||||
]
|
|
||||||
run-args = [
|
|
||||||
# "--nodefaults",
|
|
||||||
"-cpu",
|
|
||||||
"Broadwell-v3",
|
|
||||||
"-m",
|
|
||||||
"4G",
|
|
||||||
"-serial",
|
|
||||||
"stdio",
|
|
||||||
"-smp",
|
|
||||||
"cores=2",
|
|
||||||
|
|
||||||
|
|
||||||
"-soundhw",
|
|
||||||
"pcspk",
|
|
||||||
|
|
||||||
|
|
||||||
# "-device",
|
|
||||||
# "VGA",
|
|
||||||
# "-device",
|
|
||||||
# "virtio-gpu-pci",
|
|
||||||
|
|
||||||
"-device",
|
|
||||||
"vmware-svga",
|
|
||||||
|
|
||||||
"-device",
|
|
||||||
"sb16",
|
|
||||||
|
|
||||||
|
|
||||||
# "-machine", "pcspk-audiodev=0",
|
|
||||||
|
|
||||||
# "-qmp",
|
|
||||||
# "unix:../qmp-sock,server,nowait",
|
|
||||||
]
|
|
||||||
|
|
||||||
test-args = [
|
test-args = [
|
||||||
"-device",
|
"-device",
|
||||||
"isa-debug-exit,iobase=0xf4,iosize=0x04",
|
"isa-debug-exit,iobase=0xf4,iosize=0x04",
|
||||||
|
|
4
base/README.md
Normal file
4
base/README.md
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
# Base Root Filesystem
|
||||||
|
|
||||||
|
This is the base root filesystem for ableOS. It's used by tepbuild while
|
||||||
|
building the disk image.
|
17
base/boot/limine.cfg
Normal file
17
base/boot/limine.cfg
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
${ABLEOS_KERNEL}=boot:///boot/kernel
|
||||||
|
# TODO: Make a boot background image for ableOS
|
||||||
|
# ${WALLPAPER_PATH}=boot:///boot/bg.bmp
|
||||||
|
|
||||||
|
DEFAULT_ENTRY=1
|
||||||
|
TIMEOUT=3
|
||||||
|
VERBOSE=yes
|
||||||
|
|
||||||
|
# Terminal related settings
|
||||||
|
# TERM_WALLPAPER=${WALLPAPER_PATH}
|
||||||
|
TERM_BACKDROP=008080
|
||||||
|
|
||||||
|
:ableOS
|
||||||
|
COMMENT=Default ableOS boot entry.
|
||||||
|
PROTOCOL=limine
|
||||||
|
KERNEL_PATH=${ABLEOS_KERNEL}
|
||||||
|
KERNEL_CMDLINE=
|
BIN
base/home/able/bins/aos_test.wasm
Executable file
BIN
base/home/able/bins/aos_test.wasm
Executable file
Binary file not shown.
BIN
base/home/able/bins/weealloc_test.wasm
Executable file
BIN
base/home/able/bins/weealloc_test.wasm
Executable file
Binary file not shown.
252
base/home/able/configs/qwerty.keymap
Normal file
252
base/home/able/configs/qwerty.keymap
Normal file
|
@ -0,0 +1,252 @@
|
||||||
|
# Able doesn't have a full keyboard
|
||||||
|
0-NONE
|
||||||
|
1-
|
||||||
|
2-
|
||||||
|
3-BACKSPACE
|
||||||
|
4-
|
||||||
|
5-
|
||||||
|
6-
|
||||||
|
7-
|
||||||
|
8-
|
||||||
|
9-TAB
|
||||||
|
10-
|
||||||
|
11-
|
||||||
|
12-
|
||||||
|
13-ENTER
|
||||||
|
14-
|
||||||
|
15-
|
||||||
|
16-SHIFT
|
||||||
|
17-CONTROL
|
||||||
|
18-ALT
|
||||||
|
19-PAUSE
|
||||||
|
20-CAPS_LOCK
|
||||||
|
21-
|
||||||
|
22-
|
||||||
|
23-
|
||||||
|
24-
|
||||||
|
25-
|
||||||
|
26-
|
||||||
|
27-
|
||||||
|
28-
|
||||||
|
29-
|
||||||
|
30-
|
||||||
|
31-
|
||||||
|
32-SPACE
|
||||||
|
33-PAGE_UP
|
||||||
|
34-PAGE_DOWN
|
||||||
|
35-END
|
||||||
|
36-HOME
|
||||||
|
37-ARROW_LEFT
|
||||||
|
38-ARROW_UP
|
||||||
|
39-ARROW_RIGHT
|
||||||
|
40-ARROW_DOWN
|
||||||
|
41-
|
||||||
|
42-
|
||||||
|
43-
|
||||||
|
44-
|
||||||
|
45-INSERT
|
||||||
|
46-DELETE
|
||||||
|
47-
|
||||||
|
48-0
|
||||||
|
49-1
|
||||||
|
50-2
|
||||||
|
51-3
|
||||||
|
52-4
|
||||||
|
53-5
|
||||||
|
54-6
|
||||||
|
55-7
|
||||||
|
56-8
|
||||||
|
57-9
|
||||||
|
58-
|
||||||
|
59-SEMICOLON
|
||||||
|
60-
|
||||||
|
61-EQUAL
|
||||||
|
62-
|
||||||
|
63-
|
||||||
|
64-
|
||||||
|
65-a
|
||||||
|
66-b
|
||||||
|
67-c
|
||||||
|
68-d
|
||||||
|
69-e
|
||||||
|
70-f
|
||||||
|
71-g
|
||||||
|
72-h
|
||||||
|
73-i
|
||||||
|
74-j
|
||||||
|
75-k
|
||||||
|
76-l
|
||||||
|
77-m
|
||||||
|
78-n
|
||||||
|
79-o
|
||||||
|
80-p
|
||||||
|
81-q
|
||||||
|
82-r
|
||||||
|
83-s
|
||||||
|
84-t
|
||||||
|
85-u
|
||||||
|
86-v
|
||||||
|
87-w
|
||||||
|
88-x
|
||||||
|
89-y
|
||||||
|
90-z
|
||||||
|
91-
|
||||||
|
92-
|
||||||
|
93-
|
||||||
|
94-
|
||||||
|
95-
|
||||||
|
96-
|
||||||
|
97-
|
||||||
|
98-
|
||||||
|
99-
|
||||||
|
100-
|
||||||
|
101-
|
||||||
|
102-
|
||||||
|
103-
|
||||||
|
106-
|
||||||
|
107-
|
||||||
|
108-
|
||||||
|
109-
|
||||||
|
110-
|
||||||
|
111-
|
||||||
|
112-FUNCTION_1
|
||||||
|
113-FUNCTION_2
|
||||||
|
114-FUNCTION_3
|
||||||
|
115-FUNCTION_4
|
||||||
|
116-FUNCTION_5
|
||||||
|
117-FUNCTION_6
|
||||||
|
118-FUNCTION_7
|
||||||
|
119-FUNCTION_8
|
||||||
|
120-FUNCTION_9
|
||||||
|
121-FUNCTION_10
|
||||||
|
122-FUNCTION_11
|
||||||
|
123-FUNCTION_12
|
||||||
|
124-
|
||||||
|
125-
|
||||||
|
126-
|
||||||
|
127-
|
||||||
|
128-
|
||||||
|
129-
|
||||||
|
130-
|
||||||
|
131-
|
||||||
|
132-
|
||||||
|
134-
|
||||||
|
135-
|
||||||
|
136-
|
||||||
|
137-
|
||||||
|
138-
|
||||||
|
139-
|
||||||
|
140-
|
||||||
|
141-
|
||||||
|
142-
|
||||||
|
143-
|
||||||
|
145-SCROLL_LOCK
|
||||||
|
146-
|
||||||
|
147-
|
||||||
|
148-
|
||||||
|
149-
|
||||||
|
150-
|
||||||
|
151-
|
||||||
|
152-
|
||||||
|
153-
|
||||||
|
154-
|
||||||
|
155-
|
||||||
|
156-
|
||||||
|
157-
|
||||||
|
158-
|
||||||
|
159-
|
||||||
|
160-
|
||||||
|
161-
|
||||||
|
162-
|
||||||
|
163-
|
||||||
|
164-
|
||||||
|
165-
|
||||||
|
166-
|
||||||
|
167-
|
||||||
|
168-
|
||||||
|
169-
|
||||||
|
170-
|
||||||
|
171-
|
||||||
|
172-
|
||||||
|
173-MINUS
|
||||||
|
174-
|
||||||
|
175-
|
||||||
|
176-
|
||||||
|
177-
|
||||||
|
178-
|
||||||
|
179-
|
||||||
|
180-
|
||||||
|
181-
|
||||||
|
182-
|
||||||
|
183-
|
||||||
|
184-
|
||||||
|
185-
|
||||||
|
186-
|
||||||
|
187-
|
||||||
|
188-COMMA
|
||||||
|
189-
|
||||||
|
190-PERIOD
|
||||||
|
191-FORWARD_SLASH
|
||||||
|
192-GRAVE
|
||||||
|
193-
|
||||||
|
194-
|
||||||
|
195-
|
||||||
|
196-
|
||||||
|
197-
|
||||||
|
198-
|
||||||
|
199-
|
||||||
|
200-
|
||||||
|
201-
|
||||||
|
202-
|
||||||
|
203-
|
||||||
|
204-
|
||||||
|
205-
|
||||||
|
206-
|
||||||
|
207-
|
||||||
|
208-
|
||||||
|
209-
|
||||||
|
210-
|
||||||
|
211-
|
||||||
|
212-
|
||||||
|
213-
|
||||||
|
214-
|
||||||
|
215-
|
||||||
|
216-
|
||||||
|
218-
|
||||||
|
219-BRACKET_LEFT
|
||||||
|
220-BACK_SLASH
|
||||||
|
221-BRACKET_RIGHT
|
||||||
|
222-QUOTE
|
||||||
|
223-
|
||||||
|
224-
|
||||||
|
225-
|
||||||
|
226-
|
||||||
|
227-
|
||||||
|
228-
|
||||||
|
229-
|
||||||
|
230-
|
||||||
|
231-
|
||||||
|
232-
|
||||||
|
233-
|
||||||
|
234-
|
||||||
|
235-
|
||||||
|
236-
|
||||||
|
237-
|
||||||
|
238-
|
||||||
|
239-
|
||||||
|
240-
|
||||||
|
241-
|
||||||
|
242-
|
||||||
|
243-
|
||||||
|
244-
|
||||||
|
245-
|
||||||
|
246-
|
||||||
|
247-
|
||||||
|
248-
|
||||||
|
249-
|
||||||
|
250-
|
||||||
|
251-
|
||||||
|
252-
|
||||||
|
253-
|
||||||
|
254-
|
||||||
|
255-
|
4
base/home/able/kernel.md
Normal file
4
base/home/able/kernel.md
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
Hi there :>$RED$
|
||||||
|
hi
|
||||||
|
$GREEN$
|
||||||
|
hi 3
|
14
base/home/able/layout.txt
Normal file
14
base/home/able/layout.txt
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
boot/
|
||||||
|
├─ kernel.img
|
||||||
|
home/
|
||||||
|
├─ able/
|
||||||
|
│ ├─ bins/
|
||||||
|
│ ├─ config/
|
||||||
|
│ │ ├─ able_edit/
|
||||||
|
│ │ │ ├─ config.toml
|
||||||
|
│ ├─ irl_pic.png
|
||||||
|
│ ├─ password.txt
|
||||||
|
system/
|
||||||
|
├─ bins/
|
||||||
|
├─ configs/
|
||||||
|
│ ├─ kernel.toml
|
|
@ -5,7 +5,7 @@
|
||||||
* SPDX-License-Identifier: MPL-2.0
|
* SPDX-License-Identifier: MPL-2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use std::{fs, process::Command};
|
use std::{fs::{self, File}, process::Command};
|
||||||
|
|
||||||
use colored::*;
|
use colored::*;
|
||||||
|
|
||||||
|
@ -15,6 +15,7 @@ struct Options {
|
||||||
}
|
}
|
||||||
|
|
||||||
enum Subcommand {
|
enum Subcommand {
|
||||||
|
BuildImage,
|
||||||
Doc,
|
Doc,
|
||||||
Help,
|
Help,
|
||||||
Run,
|
Run,
|
||||||
|
@ -27,6 +28,7 @@ enum Subcommand {
|
||||||
impl Subcommand {
|
impl Subcommand {
|
||||||
fn from_str<S: AsRef<str>>(str: S) -> Subcommand {
|
fn from_str<S: AsRef<str>>(str: S) -> Subcommand {
|
||||||
match str.as_ref() {
|
match str.as_ref() {
|
||||||
|
"build-image" => Subcommand::BuildImage,
|
||||||
"doc" => Subcommand::Doc,
|
"doc" => Subcommand::Doc,
|
||||||
"help" => Subcommand::Help,
|
"help" => Subcommand::Help,
|
||||||
"run" | "r" => Subcommand::Run,
|
"run" | "r" => Subcommand::Run,
|
||||||
|
@ -48,6 +50,142 @@ fn main() {
|
||||||
let options = options();
|
let options = options();
|
||||||
|
|
||||||
match options.subcommand {
|
match options.subcommand {
|
||||||
|
Subcommand::BuildImage => {
|
||||||
|
let machine_text = options.arguments.get(0).cloned().unwrap_or_default();
|
||||||
|
|
||||||
|
match machine(machine_text) {
|
||||||
|
MachineType::X86_64 => {
|
||||||
|
// Cleanup
|
||||||
|
// NOTE: we are not unwrapping these, as we don't want this to fail if they
|
||||||
|
// don't exist yet, probably not the best idea tho.
|
||||||
|
// FIXME: figure out a better way to ignore errors about these not existing
|
||||||
|
#[allow(unused_must_use)]
|
||||||
|
{
|
||||||
|
fs::remove_dir_all("./limine");
|
||||||
|
fs::remove_dir_all("./disk");
|
||||||
|
fs::remove_file("./disk.img");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Build ableOS in release mode
|
||||||
|
Command::new("cargo")
|
||||||
|
.args(["build", "--release"])
|
||||||
|
.current_dir(fs::canonicalize("./ableos").unwrap())
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// Create disk directory
|
||||||
|
fs::create_dir("./disk").unwrap();
|
||||||
|
|
||||||
|
// Clone limine 3.X binaries
|
||||||
|
Command::new("git")
|
||||||
|
.arg("clone")
|
||||||
|
.arg("https://github.com/limine-bootloader/limine.git")
|
||||||
|
.arg("--branch=v3.0-branch-binary")
|
||||||
|
.arg("--depth=1")
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
println!("{}", "Building limine".bold());
|
||||||
|
Command::new("make")
|
||||||
|
.args(["-C", "limine"])
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
println!("{}", "Allocating new disk image".bold());
|
||||||
|
Command::new("dd")
|
||||||
|
.args(["if=/dev/zero", "of=disk.img", "count=1", "bs=256MiB"])
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
println!("{}", "Partitioning disk image".bold());
|
||||||
|
Command::new("sudo")
|
||||||
|
.args(["sfdisk", "disk.img"])
|
||||||
|
.stdin(File::open("./sfdisk-config").unwrap())
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// Setup loopback device for disk.img, with partitions
|
||||||
|
// FIXME: don't assume that /dev/loop0 is empty
|
||||||
|
Command::new("sudo")
|
||||||
|
.arg("losetup")
|
||||||
|
.args(["-P", "/dev/loop0", "disk.img"])
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
println!("{}", "Creating ext2 filesystem on /dev/loop0p1".bold());
|
||||||
|
Command::new("sudo")
|
||||||
|
.arg("mkfs.ext2")
|
||||||
|
.arg("/dev/loop0p1")
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
println!("{}", "Mounting filesystem".bold());
|
||||||
|
Command::new("sudo")
|
||||||
|
.arg("mount")
|
||||||
|
.args(["/dev/loop0p1", "./disk"])
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// copy ./base/* over to ./disk
|
||||||
|
Command::new("sudo")
|
||||||
|
.args(["sh", "-c"])
|
||||||
|
.arg("cp -r ./base/* ./disk")
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// copy ./limine/limine.sys over to ./disk/boot
|
||||||
|
Command::new("sudo")
|
||||||
|
.arg("cp")
|
||||||
|
.args(["./limine/limine.sys", "./disk/boot"])
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// copy the kernel over to ./disk/boot/kernel
|
||||||
|
Command::new("sudo")
|
||||||
|
.arg("cp")
|
||||||
|
.arg("./target/x86_64-ableos/release/ableos")
|
||||||
|
.arg("./disk/boot/kernel")
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// TODO: build the userspace programs and copy them over
|
||||||
|
|
||||||
|
// unmount the fs
|
||||||
|
Command::new("sudo")
|
||||||
|
.arg("umount")
|
||||||
|
.arg("./disk")
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// remove the loopback device
|
||||||
|
Command::new("sudo")
|
||||||
|
.arg("losetup")
|
||||||
|
.args(["-d", "/dev/loop0"])
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
println!("{}", "Deploying limine".bold());
|
||||||
|
Command::new("./limine/limine-deploy")
|
||||||
|
.arg("./disk.img")
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
|
}
|
||||||
|
MachineType::Unknown(unknown) => {
|
||||||
|
eprintln!(
|
||||||
|
"{}: unknown machine type `{}`",
|
||||||
|
"error".red().bold(),
|
||||||
|
unknown.bold(),
|
||||||
|
);
|
||||||
|
eprintln!("expected one of x86_64, riscv64 or aarch64");
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
eprintln!(
|
||||||
|
"{}: build-image not implemented for this machine type",
|
||||||
|
"error".red().bold(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Subcommand::Test => {
|
Subcommand::Test => {
|
||||||
Command::new("cargo")
|
Command::new("cargo")
|
||||||
.args(["test", "--target=json_targets/x86_64-ableos.json"])
|
.args(["test", "--target=json_targets/x86_64-ableos.json"])
|
||||||
|
@ -100,18 +238,137 @@ fn main() {
|
||||||
|
|
||||||
match machine(machine_text) {
|
match machine(machine_text) {
|
||||||
MachineType::X86_64 if debug => {
|
MachineType::X86_64 if debug => {
|
||||||
|
// Build ableOS
|
||||||
Command::new("cargo")
|
Command::new("cargo")
|
||||||
.args(["run", "--", "-S", "-gdb", "tcp:9000"])
|
.arg("build")
|
||||||
.current_dir(fs::canonicalize("./ableos").unwrap())
|
.current_dir(fs::canonicalize("./ableos").unwrap())
|
||||||
.status()
|
.status()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
// Setup loopback device for disk.img, with partitions
|
||||||
|
// FIXME: don't do ths if running without changes
|
||||||
|
Command::new("sudo")
|
||||||
|
.arg("losetup")
|
||||||
|
.args(["-P", "/dev/loop0", "disk.img"])
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// mount the root fs to ./disk
|
||||||
|
Command::new("sudo")
|
||||||
|
.arg("mount")
|
||||||
|
.args(["/dev/loop0p1", "./disk"])
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// copy the kernel over to ./disk/boot/kernel
|
||||||
|
Command::new("sudo")
|
||||||
|
.arg("cp")
|
||||||
|
.arg("./target/x86_64-ableos/debug/ableos")
|
||||||
|
.arg("./disk/boot/kernel")
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// unmount the root fs
|
||||||
|
Command::new("sudo")
|
||||||
|
.arg("umount")
|
||||||
|
.arg("./disk")
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// remove loopback device
|
||||||
|
Command::new("sudo")
|
||||||
|
.arg("losetup")
|
||||||
|
.args(["-d", "/dev/loop0"])
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// run qemu with "-S", "-gdb", "tcp:9000"
|
||||||
|
Command::new("qemu-system-x86_64")
|
||||||
|
.args(["-device", "piix4-ide,id=ide"])
|
||||||
|
.arg("-drive")
|
||||||
|
.arg("file=./disk.img,format=raw,if=none,id=disk")
|
||||||
|
.args(["-device", "ide-hd,drive=disk,bus=ide.0"])
|
||||||
|
// .arg("--nodefaults")
|
||||||
|
.args(["-cpu", "Broadwell-v3"])
|
||||||
|
.args(["-m", "4G"])
|
||||||
|
.args(["-serial", "stdio"])
|
||||||
|
.args(["-smp", "cores=2"])
|
||||||
|
.args(["-soundhw", "pcspk"])
|
||||||
|
// .args(["-device", "VGA"])
|
||||||
|
// .args(["-device", "virtio-gpu-pci"])
|
||||||
|
.args(["-device", "vmware-svga"])
|
||||||
|
.args(["-device", "sb16"])
|
||||||
|
// .args(["-machine", "pcspk-audiodev=0"])
|
||||||
|
// .args(["-qmp", "unix:../qmp-sock,server,nowait"])
|
||||||
|
.args(["-S", "-gdb", "tcp:9000"])
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
}
|
}
|
||||||
MachineType::X86_64 => {
|
MachineType::X86_64 => {
|
||||||
|
// Build ableOS
|
||||||
Command::new("cargo")
|
Command::new("cargo")
|
||||||
.args(["run", "--release"])
|
.args(["build", "--release"])
|
||||||
.current_dir(fs::canonicalize("./ableos").unwrap())
|
.current_dir(fs::canonicalize("./ableos").unwrap())
|
||||||
.status()
|
.status()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
// Setup loopback device for disk.img, with partitions
|
||||||
|
// FIXME: don't do ths if running without changes
|
||||||
|
Command::new("sudo")
|
||||||
|
.arg("losetup")
|
||||||
|
.args(["-P", "/dev/loop0", "disk.img"])
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// mount the root fs to ./disk
|
||||||
|
Command::new("sudo")
|
||||||
|
.arg("mount")
|
||||||
|
.args(["/dev/loop0p1", "./disk"])
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// copy the kernel over to ./disk/boot/kernel
|
||||||
|
Command::new("sudo")
|
||||||
|
.arg("cp")
|
||||||
|
.arg("./target/x86_64-ableos/release/ableos")
|
||||||
|
.arg("./disk/boot/kernel")
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// unmount the root fs
|
||||||
|
Command::new("sudo")
|
||||||
|
.arg("umount")
|
||||||
|
.arg("./disk")
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// remove loopback device
|
||||||
|
Command::new("sudo")
|
||||||
|
.arg("losetup")
|
||||||
|
.args(["-d", "/dev/loop0"])
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// run qemu
|
||||||
|
Command::new("qemu-system-x86_64")
|
||||||
|
.args(["-device", "piix4-ide,id=ide"])
|
||||||
|
.arg("-drive")
|
||||||
|
.arg("file=./disk.img,format=raw,if=none,id=disk")
|
||||||
|
.args(["-device", "ide-hd,drive=disk,bus=ide.0"])
|
||||||
|
// .arg("--nodefaults")
|
||||||
|
.args(["-cpu", "Broadwell-v3"])
|
||||||
|
.args(["-m", "4G"])
|
||||||
|
.args(["-serial", "stdio"])
|
||||||
|
.args(["-smp", "cores=2"])
|
||||||
|
.args(["-soundhw", "pcspk"])
|
||||||
|
// .args(["-device", "VGA"])
|
||||||
|
// .args(["-device", "virtio-gpu-pci"])
|
||||||
|
.args(["-device", "vmware-svga"])
|
||||||
|
.args(["-device", "sb16"])
|
||||||
|
// .args(["-machine", "pcspk-audiodev=0"])
|
||||||
|
// .args(["-qmp", "unix:../qmp-sock,server,nowait"])
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
}
|
}
|
||||||
MachineType::RiscV64 if debug => {
|
MachineType::RiscV64 if debug => {
|
||||||
eprintln!(
|
eprintln!(
|
||||||
|
|
1
sfdisk-config
Normal file
1
sfdisk-config
Normal file
|
@ -0,0 +1 @@
|
||||||
|
,,,-
|
Loading…
Reference in a new issue