|
|
当サイトは、玄箱PRO (KURO-BOX/Pro)を中心とした組み込み、Linuxと電子工作を扱っています。
会社案内
情報セキュリティおよび個人情報の取り扱いについて コメントとトラックバックは、spamを予防するために、編集担当が公開の作業をするまで非公開になっています。コメントはそれぞれ投稿した人のものです。 |
この miconapl の中身は、cd /usr/local/sbin tar xzf /home/kurobox/miconapl-nvram.tar.gz (/home/kurobox に置いた場合)
nvram の中身は、# !/bin/sh CMD=/usr/local/kurobox/bin/`basename $0` LD_LIBRARY_PATH=/usr/local/kurobox/lib $CMD $*
#!/bin/sh CMD=/usr/local/kurobox/bin/`basename $0` LD_LIBRARY_PATH=/usr/local/kurobox/lib $CMD "$@"
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 -b -a bz_on buttonピッと音がします。HDD 付近の温度を表示してみます。
miconapl -b -a temp_getうまく動作すればOKです。
このブログ記事を参照しているブログ一覧: nvram, miconapl を使えるようにする
このブログ記事に対するトラックバックURL: http://www.eleki-jack.com/mt/mt-tb.cgi/985
おすすめ書籍 |
![]() |
全く同じように導入したところ、以下のように 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:~#
何が悪いんだろう???
nvram -c set bootargs_root "root=/dev/sda2 rw panic=5"
のように、ダブルクオーテーションでくくるのではなかったかと思いますが、どうでしょうか?
mitsunaga さん、レスありがとうございます。
それも考えて
nvram -c set bootargs_root 'root=/dev/sda2 rw panic=5'
nvram -c set bootargs_root "'root=/dev/sda2 rw panic=5'"
もやってみましたが、結果は同じでした。
mitsunaga さんのところではうまく動いているのでしょうか?
上記の手順でおかしい所があります・・・これが原因?
(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
何とリンクするのだろう?
なるほど、たぶん使用しているスクリプトを変えないといけないですね。とりあえずは長いですが、
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 になります。
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 のスクリプトが悪いのでしょうね。
さて、どう直せばよいのやら・・・一見、問題ないスクリプトに見えますが・・・
テストありがとうございます。たぶん 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'\" がいい場合もあると思います。
以下の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
何度も、すいません。スクリプトを以下のように書き換えてみてください。
# !/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なら、記事とダウンロードファイルを書き直します。
mitsunaga さま
$* を “$@” に変えました。
あっ!OKです・・・素晴らしいです・・・ありがとうございます。
wide:~# nvram -c set bootargs_root 'root=/dev/sda2 rw panics=5'
>nvram_set:bootargs_root = root=/dev/sda2 rw panics=5
テストありがとうございました。
サイトの更新が終了してから、記事等を書き直すつもりです。