カテゴリ
リンク

当サイトは、玄箱PRO (KURO-BOX/Pro)を中心とした組み込み、Linuxと電子工作を扱っています。
会社案内

情報セキュリティおよび個人情報の取り扱いについて


コメントとトラックバックは、spamを予防するために、編集担当が公開の作業をするまで非公開になっています。コメントはそれぞれ投稿した人のものです。

■Debian 化で使えなくなったコマンド 
 Debian 化で使えなくなったコマンドに、nvram と miconapl があります。nvram コマンドは、主に u-boot の環境変数を読み書きするプログラム、miconapl コマンドは、電源スイッチや、LED, ファン回転数などに関係しているコマンドです。自分でプログラムを書くという方法もあるのですが、玄人志向のプログラムを使えるようにしてみます。ここでは別項のオリジナル・ファイルのバックアップが終わっているものとします。

  ■Debian 化で使えなくなった理由は?
 Debian 化で使えなくなった理由は、nvram も miconapl も玄箱PROに特有で Debian のパッケージがないことが、その理由です。では、フラッシュ・メモリやhddroofs.tar.gz内からコピーすればいいかというと、それだけではダメです。理由は必要なライブラリも用意しないといけないからです。EABI, OABI の問題は、これらのコマンドでは起きないようです。
■実際の作業をする 
 ここでは、/home/mtd2 にmiconapl-nvram.tar.gzをダウンロードし、適当なディレクトリ (/home/kurobox など)にコピーします。コピーしたら、/usr/local/sbin に展開します。
cd /usr/local/sbin

tar xzf /home/kurobox/miconapl-nvram.tar.gz      (/home/kurobox に置いた場合)
この miconapl の中身は、
# !/bin/sh
CMD=/usr/local/kurobox/bin/`basename $0`
LD_LIBRARY_PATH=/usr/local/kurobox/lib $CMD $*
nvram の中身は、
#!/bin/sh
CMD=/usr/local/kurobox/bin/`basename $0`
LD_LIBRARY_PATH=/usr/local/kurobox/lib $CMD "$@"

となっています。ダイナミック・ライブラリの検索パスを指定し、呼び出されたコマンド名の /usr/local/kurobox/bin/ 内の相当するバイナリを呼び出しています。 

■nvram コマンドをテストする
まず、nvram コマンドをテストします。
nvram -c printenv
環境変数が表示されたらOKです。
kurobox:/usr/local/sbin# nvram -c printenv
1: [baudrate=115200]
2: [loads_echo=0]
3: [ipaddr=192.168.11.150]
4: [serverip=192.168.11.1]
5: [rootpath=/nfs/arm]
6: [cpuName=926]
7: [CASset=min]

                              <略>

29: [usb0Mode=host]
30: [usb1Mode=host]
31: [default_kernel_addr=0x00100000]
32: [bootargs_base=console=ttyS0,115200]
33: [bootargs_root=root=/dev/sda2 rw panic=5]
34: [bootargs=console=ttyS0,115200 root=/dev/sda2 rw panic=5 BOOTVER=1.09]
35: [bootcmd=ide reset; ext2load ide 0:1 $(default_kernel_addr) /$(kernel); bootm $(default_kernel_addr)]
36: [nand_boot=no]
kurobox:/usr/local/sbin#
もし、/dev/mtd0 が見つからないというエラーが出た場合は、
mknod /dev/mtd0 b 31 0 chmod 644 /dev/mtd0
を実行します。

 ■ miconapl をテストする
 beep を鳴らしてみます。
miconapl -b -a bz_on button
ピッと音がします。HDD 付近の温度を表示してみます。
miconapl -b -a temp_get
うまく動作すればOKです。

 -------------------------------------------------------------------------
2007/08/29 変更: o 無駄なコピーを減らした (thanks ひろくんさん)
2008/02/03 修正: サイトの更新に伴うリンク切れの修正

 カテゴリ 

  ,

トラックバック(0)

このブログ記事を参照しているブログ一覧: nvram, miconapl を使えるようにする

このブログ記事に対するトラックバックURL: http://www.eleki-jack.com/mt/mt-tb.cgi/985

コメント(11)

yoshida :

全く同じように導入したところ、以下のように set コマンドの第2パラメータ以降が渡されません???

wide:~# nvram -c set bootargs_root root=/dev/sda2 rw panic=5
>nvram_set:bootargs_root = root=/dev/sda2
wide:~#

仮に「,」を入れてパラメータ間のスペースをなくしてみると(当然かもしれませんが)、以下の結果になります。

wide:~# nvram -c set bootargs_root root=/dev/sda2,rw,panic=5
>nvram_set:bootargs_root = root=/dev/sda2,rw,panic=5
wide:~#

何が悪いんだろう???

yoshida :

nvram -c set bootargs_root "root=/dev/sda2 rw panic=5"

のように、ダブルクオーテーションでくくるのではなかったかと思いますが、どうでしょうか?

yoshida :

mitsunaga さん、レスありがとうございます。

それも考えて
nvram -c set bootargs_root 'root=/dev/sda2 rw panic=5'
nvram -c set bootargs_root "'root=/dev/sda2 rw panic=5'"
もやってみましたが、結果は同じでした。

mitsunaga さんのところではうまく動いているのでしょうか?

yoshida :

上記の手順でおかしい所があります・・・これが原因?

(1) cp -p ld-2.3.6.so libc-2.3.6.so libgcc_s.so.1 /usr/local/kurobox/lib/
これを実行するまでに、その前の手順で /usr/local/kurobox/lib/ld-2.3.6.so が出来てしまっている。

(2) ln -s libc-2.3.6.so /usr/local/kurobox/lib/libc.so.6
なぜ? libc.so.6 = libc-2.3.6.so にするのだろう?

(3) ln -s /usr/local/kurobox/lib/ld-linux.so.3
何とリンクするのだろう?

yoshida :

なるほど、たぶん使用しているスクリプトを変えないといけないですね。とりあえずは長いですが、

LD_LIBRARY_PATH=/usr/local/kurobox/lib nvram -c set bootargs_root ‘root=/dev/sda2 rw panic=5′

とすると、どうでしょうか(1行です。改行していたらつないでください)。あと、
(1) は不要なコピーですね。でも悪さはしないと思います。
(2) libc.so.6 のファイル名でライブラリが呼び出される可能性があるからです。
(3) リンク先を省略しているので、カレントディレクトリの ld-linux.so.3 になります。

yoshida :

mitsunaga さん、重ね重ねのレスありがとうございます。

(1)まずは何にもしないで現象確認・・・不具合再現しました。
wide:~# nvram -c set bootargs_root 'root=/dev/sda2 rw panic=5'
>nvram_set:bootargs_root = root=/dev/sda2

(2)アドバイスの方法でやってみました・・・basenameエラーになりました
wide:~# LD_LIBRARY_PATH=/usr/local/kurobox/lib nvram -c set bootargs_root 'root=/dev/sda2 rw panic=5'
basename: error while loading shared libraries: libc.so.6: cannot handle TLS data

(3)オリジナルの nvram で動作させました・・・OKです!!!!
wide:~# LD_LIBRARY_PATH=/usr/local/kurobox/lib /usr/local/kurobox/bin/nvram -c set bootargs_root 'root=/dev/sda2 rw panic=5'
>nvram_set:bootargs_root = root=/dev/sda2 rw panic=5

と言う事は /usr/local/sbin/nvram のスクリプトが悪いのでしょうね。
さて、どう直せばよいのやら・・・一見、問題ないスクリプトに見えますが・・・

yoshida :

テストありがとうございます。たぶん nvram はコマンドはテストし忘れていました。シェルスクリプトが悪いというか、次のような現象が起きています。以下の2行を foo.sh に書いてください。

#! /bin/sh
echo $@

この シェルスクリプトを、

sh foo.sh "1 2"
sh foo.sh '1 2'
sh foo.sh '"1 2"'

と実行すると、外側のクォーテーションや、ダブルクォーテーションが消えていることが分かると思います。これは、コマンド入力したシェルが解釈しているからです。つまり、

nvram -c set bootargs_root 'root=/dev/sda2 rw panics=5'

と入力したとき、シェルスクリプトには、

'root=/dev/sda2 rw panics=5'

ではなく、

root=/dev/sda2 rw panics=5

が渡されています。そのため、本来の /usr/local/kurobox/bin/nvram に渡すときに、

root=/dev/sda2
rw
panics=5

は分かれて(別の引数として)渡されてしまうので、期待しない動作になります。

ちょっと考えたのですが、スクリプトに細工をするよりは、

nvram -c set bootargs_root \''root=/dev/sda2 rw panics=5'\'

とするのがよいかなと思います。こうすると

\''root=/dev/sda2 rw panics=5'\'

は、コマンドを打ち込んだシェルで

'root=/dev/sda2 rw panics=5'

となり、/usr/local/kurobox/bin/nvram に上記が渡されるので期待する動作になります。' は通常シェルに解釈されるのですが、 \ を ' の前に書くことで解釈を止めさせ(\' は ' になると思ってもよい)、そのまま渡しています。次の 'root=/dev/sda2 rw panics=5' 部分の ' はシェルが解釈して、 取ってしまいます。最後の \' は ' になります。

\' → '
'root=/dev/sda2 rw panics=5' → root=/dev/sda2 rw panics=5
\' → '

です。同様に "test word" でくくる場合には、\""test word"\" としてください。場合によっては、\"'test word'\" がいい場合もあると思います。

yoshida :

以下の3つパターンを試しましたがNGでした。

wide:~# nvram -c set bootargs_root \"root=/dev/sda2 rw panic=5'\'
>nvram_set:bootargs_root = "root=/dev/sda2
wide:~# nvram -c set bootargs_root \""root=/dev/sda2 rw panic=5"\"
>nvram_set:bootargs_root = "root=/dev/sda2
wide:~# nvram -c set bootargs_root \"'root=/dev/sda2 rw panic=5'\"
>nvram_set:bootargs_root = "root=/dev/sda2

yoshida :

何度も、すいません。スクリプトを以下のように書き換えてみてください。

# !/bin/sh

CMD=/usr/local/kurobox/bin/`basename $0`

LD_LIBRARY_PATH=/usr/local/kurobox/lib $CMD "$@"

$* を "$@" に変えています。これで、

nvram -c set bootargs_root 'root=/dev/sda2 rw panics=5'

が使えるはずです。OKなら、記事とダウンロードファイルを書き直します。

yoshida :

mitsunaga さま

$* を “$@” に変えました。

あっ!OKです・・・素晴らしいです・・・ありがとうございます。

wide:~# nvram -c set bootargs_root 'root=/dev/sda2 rw panics=5'
>nvram_set:bootargs_root = root=/dev/sda2 rw panics=5

yoshida :

テストありがとうございました。
サイトの更新が終了してから、記事等を書き直すつもりです。

コメントする

おすすめ書籍
Powered by
Movable Type 4.1