| 
    L-Card+16Mでドライバーモジュールを動かす
   L-Card+で実績があるドライバーを
   L-Card+16Mで試してみたところ、
   kernelがtrapで止まってしまいました。
   その原因と解決方を調べましたので、報告します。
    
   まちがい、もっと良い解決方法など
    ありましたら、教えて下さい。 
    
     insmodの問題
	 
	 L-Card+16Mのinsmodコマンド(実体は busybox)は、
	 問題があって動きません。
	 
	 insmodを作るを参照し、できた insmod.staticを
	 L-Card+16Mに転送し、使用して下さい。
	  
     こけ方
	 
	 上述のinsmodでカーネルのモジュールの組み込みは
	 できますが、デバイスにアクセスしてみると、
	 こけます。こんな感じです。
	 あとは、電源を入れ直して rebootするしかありません。
	  
     こける場所
	 
	 こける場所を探して行くと、
	 MOD_INC_USE_COUNTでこけることが、わかりました。
	 さらに調べて行くと、
	 atomic_addが怪しそうです。
	 CONFIG_CPU_HAS_LLSCのマクロの有無で
	 動作が違います。 
	 古いL-Card+のソースで調べると、このマクロは定義されていませんが、
	 L-Card+16M添付のカーネルソースの設定のデフォルトでは、
	 定義されるようです。
	  
     対策
         
          
	   cp config.l-card .config
	   make menuconfig
	   何も修正せず、kernelのconfigurationをセーブして、exit
	   make dep
	   mipsel-linux-gcc用の include/linux, include/asm以下を更新。
	       インストール時にcp -r したのであれば、再度 cp -r.
	       シンボリックリンクを張っているのであれば何もしないで良い。
	   ドライバーモジュールを再コンパイルする。
	  |