ld
Linuxでカーネルのアセンブリファイルに対してコマンドを使用しようとしています。grubで起動するには、1Mbアドレスの後にある必要があります。したがって、私のリンクスクリプトには、アドレス0x00100000に向かうテキストが含まれています。
これが私が使用しているリンカースクリプトです:
SECTIONS {
.text 0x00100000 :{
*(.text)
}
textEnd = .;
.data :{
*(.data)
*(.rodata)
}
dataEnd = .;
.bss :{
*(.common)
*(.bss)
}
bssEnd = .;
}
私の質問は出力ファイルについてです。ファイルのバイナリを見ると、テキストセクションは0x1000から始まります。スクリプト内のテキストの場所を変更し、0x500などの0x1000未満のアドレスを使用すると、テキストはそこから始まります。しかし、0x1000を超えると、丸められます(0x2500はテキストを0x500に配置します)。
テキストを0x100000にするように指定すると、出力ファイルに含まれるべきではありませんか?または、やるべきことがもっとあることを指定するバイナリの別の部分がありますか。カーネルの起動に問題があるので質問していますが、今のところ、リンカーの出力を理解しようとしているだけです。