前提・実現したいこと
質問に不備がありましたら、ご指摘いただけますと幸いです。
osの勉強をしているものです。
「os自作入門」という本を参考にlinux環境で自作osの開発をしています。
フォントファイルを追加して文字を画面に表示させるというところでldコマンドからエラーがでてしまいます。まだ原因となるファイルも確実にわかってはいないのですが、フォントファイルを追加してリンクしようとするとエラーが発生するため、リンカスクリプトに原因があるのではないかと考えております。下記のソースコードのファイルについてですがhankakuがフォントファイルです。
確保していない領域を使おうとしているときにでるエラーらしいのでentryやtextの部分の値を変えてみたりしましたが、うまくいきませんでした。
初歩的なミスをしているかもしれませんが、どうしてもうまくいかないので解決策がお分かりの方がいらっしゃいましたら、ご助言いただけますと大変助かります。
###発生している問題・エラーメッセージ
ld -m elf_i386 -e HariMain -o bootpack.bin -T haribote.ls bootpack.o hankaku.o nasmfunc.o make: *** [Makefile:14: bootpack.bin] Segmentation fault (コアダンプしました) make: *** ファイル 'bootpack.bin' を削除します
該当のソースコード
/*haribote.ls リンカスクリプトファイル*/ OUTPUT_FORMAT("binary"); SECTIONS { .head 0x0 : { LONG(64 * 1024) /* 0 : size(stack+.data+heap) */ LONG(0x69726148) /* 4 : "Hari" */ LONG(0) /* 8 : mmarea*/ LONG(0x310000) /* 12 : stack初期値 & .data転送先 */ LONG(SIZEOF(.data)) /* 16 : size of .data */ LONG(LOADADDR(.data)) /* 20 : size of .data */ LONG(0xE9000000) /* 24 : E9000000 */ LONG(HariMain - 0x20) /* 28 : entry - 0x20 */ LONG(0x01) /* 32 : heap領域開始アドレス */ } .text : {*(.text)} .data 0x310000 : AT ( ADDR(.text) + SIZEOF(.text) ) { *(.data) *(.rodata*) *(.bss) } /DISCARD/ : { *(.eh_frame) } } /*bootpack.cの一部*/ void HariMain(void) { struct BOOTINFO *binfo = (struct BOOTINFO *) 0x0ff0; extern char hankaku[4096]; init_palette(); init_screen(binfo->vram, binfo->scrnx, binfo->scrny); putfont8(binfo->vram, binfo->scrnx, 8, 8, COL8_FFFFFF, hankaku + 'A' * 16); putfont8(binfo->vram, binfo->scrnx, 16, 8, COL8_FFFFFF, hankaku + 'B' * 16); putfont8(binfo->vram, binfo->scrnx, 24, 8, COL8_FFFFFF, hankaku + 'C' * 16); putfont8(binfo->vram, binfo->scrnx, 40, 8, COL8_FFFFFF, hankaku + '1' * 16); putfont8(binfo->vram, binfo->scrnx, 48, 8, COL8_FFFFFF, hankaku + '2' * 16); putfont8(binfo->vram, binfo->scrnx, 56, 8, COL8_FFFFFF, hankaku + '3' * 16); for (;;) { io_hlt(); } } /*hankaku.cの一部*/ char hankaku[4096] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,....};
試したこと
hankaku.cをbootpack.cにchar hankaku[4096]で無理やり貼り付けるとうまくいきます。
補足情報
fedoraを使っています。
コンパイラはgccです。
###参考にさせていただいたサイト
https://vanya.jp.net/os/haribote.html
http://bttb.s1.valueserver.jp/wordpress/blog/2017/12/13/makeos-5-1/
回答1件
あなたの回答
tips
プレビュー