[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Pocket PostPet
こんにちは、塩田です。
From: Atsushi Onoe <onoe@sm.sony.co.jp>, Date: Wed, 5 Jul 2000 10:53:47 +0900
> > 残念ながら、mipseb/mipselではサポートされていないようです。
>
> 少なくともサポートできない理由はないですよね?
昔ちょっとやろうとしたのですが、lkm では、
1. lkm objectをロードするための領域をカーネル内に確保する。
2. 確保した領域のアドレスとkernel symbolを元にして、lkm object中の
未解決の名前を解決した新たなobjectをldで作成する。
3. そのobjectをカーネル内に確保した領域にロードする。
4. cdevsw[]などのフックを操作して使用可能にする。
ということをやりますが、mips の場合には、1 で確保される領域はkernel
virtualな領域で、そのアドレスはkseg2(0xcXXXXXXX)になってしまうので、
kernelのあるkesg0 (0x8xxxxxxx) とldでリンクしようとするとjumpのオフ
セット(28bit?)が足りないためうまくリンクできませんでした。
(多分これ以外の問題はないと思います。)
そのため、mipsでlkmをサポートする場合、1 でkernel内に確保する領域を
kseg0 に取るようにするか、 2 でリンクする時になんとかする必要があり
ます。
kseg0 に連続した領域を確保するのは、boot直後ならともかく、いつも連続
した領域が見つかるとは限らないので難しそうです。
ldでリンクがうまくいかないのは、
jal tsleep
となっているからだめな訳で、
la t8,tsleep
jalr t8
になっていればいいんですけど、こういうのはgccやgasのオプションで何と
かなるんでしょうか?
---
塩田 憲行 shiota@imasy.or.jp
Noriyuki Shiota nori@shiota.imasy.or.jp