質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

QEMU

QEMU(キューエミュ)は、Fabrice Bellardが中心となって開発しているオープンソースのプロセッサエミュレータ

Q&A

1回答

2358閲覧

Ubuntu QEMUで出たエラー

Locu_______

総合スコア16

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

QEMU

QEMU(キューエミュ)は、Fabrice Bellardが中心となって開発しているオープンソースのプロセッサエミュレータ

0グッド

0クリップ

投稿2021/09/19 04:29

Linux Ubuntuで「フルスクラッチで作る! x86_64自作OS」を見ながら、OSを作っているのですが、2.6のQEMUで実行今やっているのですが、本通りにやっていたのですが、警告が出てしまってQEMUが起動されません。

エラーメッセージ

WARNING: Image format was not specified for 'json:{"fat-type": 0, "dir": "fs", "driver": "vvfat", "floppy": false, "rw": false}' and probing guessed raw. Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted. Specify the 'raw' format explicitly to remove the restrictions. qemu-system-x86_64: Initialization of device ide-hd failed: Block node is read-only

開発言語 : C ・ リンカスクリプト

開発環境

  • Linux Ubuntu 20.04 LTS

ソースコード
<main.c>

C

1#define BG_RED 0 2#define BG_GREEN 255 3#define BG_BLUE 0 4 5struct pixelformat { 6 unsigned char b; 7 unsigned char g; 8 unsigned char r; 9 unsigned char _reserved; 10}; 11 12struct framebuffer { 13 struct pixelformat *base; 14 unsigned long long size; 15 unsigned int hr; 16 unsigned int vr; 17}; 18 19void start_kernel(void *_t __attribute__ ((unused)), struct framebuffer *fb, 20 void *_fs_start __attribute__ ((unused))) 21{ 22 unsigned int x, y; 23 struct pixelformat *p; 24 25 for (y = 0; y < fb->vr; y++) { 26 for (x = 0; x < fb->hr; x++) { 27 p = fb->base + (fb->hr * y) + x; 28 p->r = BG_RED; 29 p->g = BG_GREEN; 30 p->b = BG_BLUE; 31 } 32 } 33 34 while (1); 35} 36

<kernel.ld>

ld

1OUTPUT_FORMAT("binary"); 2 3MEMORY 4{ 5 exec_file(r) : ORIGIN = 0x00000000, LENGTH = 1m 6 ram(wx) : ORIGIN = 0x00110000, LENGTH = 960k 7} 8 9SECTIONS 10{ 11 .header : { 12 QUAD(__bss_start) 13 QUAD(__bss_end - __bss_start) 14 } > exec_file 15 16 .body : { 17 *(.text) 18 19 *(.rodata) 20 21 *(.data) 22 23 __bss_start = .; 24 *(.bss) 25 __bss_end = .; 26 27 *(.eh_frame) 28 } > ram AT> exec_file 29}

<Makefile>

make

1TARGET = kernel.bin 2CFLAGS = -Wall -Wextra -nostdinc -nostdlib -fno-builtin -fno-common 3LDFLAGS = -Map kernel.map -s -x -T kernel.ld 4 5$(TARGET): main.o 6 ld $(LDFLAGS) -o $@ $+ 7 8%.o: %.c 9 gcc $(CFLAGS) -c -o $@ $< 10 11run: $(TARGET) 12 cp $(TARGET) ../fs/ 13 qemu-system-x86_64 -m 4G -bios OVMF.fd -hda fat:../fs 14 15clean: 16 rm -f *~ *.o *.map $(TARGET) 17 18.PHONY: run clean

<ディレクトリ構成>

fs / kernel.bin fs / EFI / BOOT / BOOTX64.EFI

<ファイルの作成方法>
kernel.bin :

  • main.C
  • kernel.ld
  • Makefile

上記3つのファイルを作り、MakefileのあるディレクトリでTerminalに

Terminal

1cd <Makefileのあるディレクトリパス> 2make

そうすると

  • kernel.bin
  • kernel.map
  • main.o

上記3つのファイルが生成されます。
そうしたら、kernel.binの作成は終わったので、ファイルをディレクトリ構成どおりにファイルを配置して、Terminalで

Terminal

1qemu-system-x86_64 -bios OVMF.fd -hda fat:fs

を実行すると、一番最初のエラーが表示されます。

わかる人がいれば教えていただきたいです。

Teratailを初めて使うので、見にくかったりするかと思いますがご了承ください。

長文失礼しました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

fsディレクトリがデフォルトで読み取り専用として読み込まれる事が原因のようなので、

terminal

1$ qemu-system-x86_64 -bios OVMF.fd -hda fat:rw:fs

のようにrwを指定してやると読み書き可能となり問題が解消するかと思われます。

投稿2023/09/11 15:12

ms0503

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問