[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