rust-osdev / bootimage

Tool to create bootable disk images from a Rust OS kernel.
Apache License 2.0
764 stars 67 forks source link

Could not open bootloader #25

Closed GrayJack closed 5 years ago

GrayJack commented 5 years ago

When I try to build blog_os or intermezzOS or my "OS" I get this error: Error: Failed to build bootloader: Could not open bootloader: No such file or directory (os error 2)

And I can't see to find the reason why since all of them already have the bootloader package as dependency

phil-opp commented 5 years ago

The error occurs here in the code, which means that the bootloader build succeeded, but there is no bootloader output file. I don't know how this could happen.

Which version of bootimage and bootloader are you using and what's your Rust version? And which OS are you on (Windows, Linux, macOS)?

GrayJack commented 5 years ago

I am using the latests release to this date, Rust 1.33.0-nightly, on Linux

phil-opp commented 5 years ago

Thanks. That's strange, I'm using Linux too and it is also regularly tested on travis CI, but I've never seen this error. Do you use any .cargo/config files or special Rust/Cargo environment variables such as RUSTFLAGS?

GrayJack commented 5 years ago

I have a special path environment for Rust target folder, that's all. But i also did a reset of that and it gave me the same mistake

phil-opp commented 5 years ago

This could be the problem. Bootimage performs an uncommon second building step to build the bootloader and it does not handle any target overrides yet. I think the problem is that the bootloader is put to your custom target folder, but bootimage looks for it in the default location.

What option are you using exactly to override the target folder?

GrayJack commented 5 years ago

Something like

export $CARGO_TARGET_DIR=/path/to/my/custom/target/dir
phil-opp commented 5 years ago

Ok. Could you try wether it works when you don't set the environment variable?

GrayJack commented 5 years ago

Yeah, looks like that works...

I wonder why it doesn't work when I simply have that set and simply unset it at runtime

like if I have set export CARGO_TARGET_DIR=/path/to/my/custom/target/dir and then export CARGO_TARGET_DIR=

after that using bootimage don't work.

But it works when I don't set that env at all

phil-opp commented 5 years ago

I just opened #26, which should fix the compilation with a set CARGO_TARGET_DIR. Could you try whether this works for you? To install the version from this pull request, run:


cargo install bootimage --git https://github.com/rust-osdev/bootimage.git --branch bootloader_target_dir --debug --force
GrayJack commented 5 years ago

Yeap, it worked!!! Nice :3

phil-opp commented 5 years ago

Perfect, thanks for testing!