Armadilloフォーラム

ttymxc1のパーミッションについて

hondah

2015年9月29日 19時24分

いつもお世話になっております。

本田と申します。

Armadilloでコンソールポートのパーミッションを変更したいと思うのですが、
何か弊害が発生するでしょうか。

具体的には
/dev/ttymxc1を666(rwrwrw)に変更
使用用途としては、シリアルポートの信号線情報の取得です。

ご教授の方、よろしくお願い致します。

コメント

追記

デフォルトの/dev/ttymxc1は611(rw--w--w-)のみで、
rootユーザーのみ、信号線情報を取得できます。
root以外のユーザーで取得できればと考えております。

以上、よろしくお願いいたします。

at_yuma.arakawa

2015年9月30日 15時35分

> 何か弊害が発生するでしょうか。
パーミッション変更により弊害が発生することはありません。

> root以外のユーザーで取得できればと考えております。
そのような用途であれば、/etc/config/rc.local にて
chmod コマンドで変更するのが簡単かと思います。

udevで動的に生成されるデバイスファイル以外は、vendors/AtmarkTechno/*/vendors/AtmarkTechno/*/ に記述があります。
a440の場合は、vendors/AtmarkTechno/Armadillo-440/ext2_devtable.txt です。

このファイルは、romfsイメージを生成するときに利用されます。第3カラムがパーミッション (mode) なので、そこの数字を変更してみてください。

at_yuma.arakawa様、at_yashi様

ご回答ありがとうございます。使用Armadilloは420,410になります。
vendors/AtmarkTechno/Armadillo420(410)/ext2_devtable.txt を
/dev/ttymxc c 660 0 0 207 16
/dev/ttymxc c 666 0 0 207 16
に変更し、Makeし直した所、/dev/ttymxc1は666(crw-rw-rw-)になりました。

助かりました。ありがとうございます。

中村です。

便乗質問です。

at_yashiさん:
> udevで動的に生成されるデバイスファイル以外は、vendors/AtmarkTechno/*/vendors/AtmarkTechno/*/ に記述があります。
> a440の場合は、vendors/AtmarkTechno/Armadillo-440/ext2_devtable.txt です。

本田さん:
> vendors/AtmarkTechno/Armadillo420(410)/ext2_devtable.txt を
> /dev/ttymxc c 660 0 0 207 16
> /dev/ttymxc c 666 0 0 207 16
> に変更し、Makeし直した所、/dev/ttymxc1は666(crw-rw-rw-)になりました。

これ、できました?
Armadillo-440でやってみましたが、できませんでした。

ext2_devtable.txtについては前から疑問点(確認したい点)があったので、
教えてください。
- udevが動いているときは、このファイルの設定は使われないのではないでしょうか?
- userlandのコンフィグレーションでudevをOFFにすると使われる?

udevがONの場合、dfすると
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/ram0 29356 26487 1392 95% /
udev 63252 4 63248 0% /dev
となって、udevが新しく/devをマウントする(?)ので、
元の/dev(ext2_devtable.txtを元に生成されたもの)が
見えなくなるものと思います。

コンフィグレーションでudevをOFFにすると、
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/ram0 29116 26265 1386 95% /
これだけです。

で、udevをOFFにしてext2_devtable.txtで
> /dev/ttymxc c 666 0 0 207 16
をやってみたところ crw-rw-rw- になりました。

udevを動かすときに、udevによる自動生成ではなくて
手動で/dev以下にデバイスを作るには、/etc/udev/links.confに書けば
いいようですが、links.confではパーミッションを設定できません。
この場合のパーミッションはどうやって設定するのでしょう?

--
なかむら

> これ、できました?
> Armadillo-440でやってみましたが、できませんでした。

あれ、ごめんなさい。

> ext2_devtable.txtについては前から疑問点(確認したい点)があったので、
> 教えてください。
> - udevが動いているときは、このファイルの設定は使われないのではないでしょうか?

使われます。
イメージファイル (romfs.img)を生成するツール genext2fs が使うファイルでので、
device node は、udev の有無にかかわらず romfs.img の中に生成されます。
romfs.img を loopback で mount すると見えるはずです。

たしかに中村さんが下記に書いているとおり、udev は /dev の上にRAMベースのファイルシステムを
mountするので、そのままでは見えなくなってしまいます。
ただ、udev って、/dev以下の device node を /dev に作りなおすかとおもっていたのですが、
ごめんなさい、勘違いかもしれません。

> udevを動かすときに、udevによる自動生成ではなくて
> 手動で/dev以下にデバイスを作るには、/etc/udev/links.confに書けば
> いいようですが、links.confではパーミッションを設定できません。
> この場合のパーミッションはどうやって設定するのでしょう?

あまり良い方法がないですね。

- links.conf を拡張して、chmod が動くようにする
- udev の rule の MODE を使う
- boot script の中で、chmod する

くらいでしょうか?

中村です。

at_yashi さん、回答、ありがとうございます。

> > - udevが動いているときは、このファイルの設定は使われないのではないでしょうか?
>
> 使われます。
> イメージファイル (romfs.img)を生成するツール genext2fs が使うファイルでので、
> device node は、udev の有無にかかわらず romfs.img の中に生成されます。
> romfs.img を loopback で mount すると見えるはずです。

生成されたimageファイルの中身までは確認していませんが、
ベンダディレクトリのMakefileでgenext2fsで読み込んでいるのを
確認した上での質問でした。

> ただ、udev って、/dev以下の device node を /dev に作りなおすかとおもっていたのですが、
> ごめんなさい、勘違いかもしれません。

質問を投稿する前にgenext2fsに
/dev/hoge d 777 - - ...
というようなのを書いて試したのですけど、udevが動いていると(udevが
/devを作っていると)、/dev/hogeディレクトリは作られませんでした。
udevをoffにした(udevを起動させない)イメージを作れば
/dev/hoge というディレクトリができてました。

> > いいようですが、links.confではパーミッションを設定できません。
> > この場合のパーミッションはどうやって設定するのでしょう?
>
> あまり良い方法がないですね。
>
> - links.conf を拡張して、chmod が動くようにする
> - udev の rule の MODE を使う
> - boot script の中で、chmod する

ありがとうございます。

--
なかむら

中村です。

投稿する前に/etc/init.d/udevdもチェックしとけばよかった・・・
links.confって、このスクリプトでしか見てませんね。

> > > いいようですが、links.confではパーミッションを設定できません。
> > > この場合のパーミッションはどうやって設定するのでしょう?
> >
> > あまり良い方法がないですね。
> >
> > - links.conf を拡張して、chmod が動くようにする

links.confを拡張して、/etc/init.d/udevdスクリプトを改造するのがようさそうです。
/etc/init.d/udevdから抜粋

reate_extra_node() {
    [ -e /etc/udev/links.conf ] || return 0
    grep '^[^#]' /etc/udev/links.conf | \
        while read type name arg1; do
            [ "$type" -a "$name" -a ! -e "/dev/$name" -a ! -L "/dev/$name" ] || continue
            case "$type" in
                L) ln -s $arg1 /dev/$name ;;
                D) mkdir -p /dev/$name ;;
                M) mknod -m 600 /dev/$name $arg1 ;;
                *) log_warning_msg \
                        "links.conf: unparseable line ($type $name $arg1)" ;;
            esac
    done
}

--
なかむら

中村です。

たびたびスミマセン。

> links.confを拡張して、/etc/init.d/udevdスクリプトを改造するのがようさそうです。

気になるところがあったので、実際に動かしてみました。

1) /etc/udev/links.conf を次のように修正

修正前

#M ttymxc0      c 207 16
M ttymxc1       c 207 17
M ttymxc2       c 207 18
#M ttymxc3      c 207 19
M ttymxc4       c 207 20

修正後

M ttymxc0      c 207 16
M ttymxc1       c 207 17
M ttymxc2       c 207 18
M ttymxc3      c 207 19
M ttymxc4       c 207 20

2) /etc/init.d/udevdを次のように修正

udevdデーモンを起動る直前に
chmod 666 /dev/ttymxc*
を実行

このようなromfsイメージを作ってブートさせ、telnetからguestでlogin。
/dev/ttymxc*のパーミッションを確認。

[guest@armadillo440-0 (ttyp0) ~]$ ls -l /dev/ttymxc*
crw-rw-rw-    1 root     root     207,  16 Jan  1 09:00 /dev/ttymxc0
crw--w--w-    1 root     root     207,  17 Jan  1 09:00 /dev/ttymxc1
crw-rw----    1 root     root     207,  18 Jan  1 09:00 /dev/ttymxc2
crw-rw-rw-    1 root     root     207,  19 Jan  1 09:00 /dev/ttymxc3
crw-rw----    1 root     root     207,  20 Jan  1 09:00 /dev/ttymxc4

udevが自動では作らないttymxc0とttymxc3は666(rw-rw-rw-)になりましたが、
/etc/udev/links.confに記述がなくてもudevが自動で作るttymxc2と4は
udevによってrw-rw----にされてしまいました。
ttymxc1はudevのあとgettyが動いてrw--w--w-になっているものと思います。

[guest@armadillo440-0 (ttyp0) ~]$ ps | grep getty
1306 root 652 S /sbin/getty -L 115200 ttymxc1 vt102
1324 guest 692 S grep getty

ということで、
> links.confを拡張して、/etc/init.d/udevdスクリプトを改造するのがようさそうです。
でchmodする方法はNGでした。

udevが動いたあと(ttymxc1はgettyも動いたあと)、
rc.localなどでchmodするのが簡単確実っぽいです。

--
なかむら

いつもお世話になっております。本田です。

> 本田さん:
> > vendors/AtmarkTechno/Armadillo420(410)/ext2_devtable.txt を
> > /dev/ttymxc c 660 0 0 207 16
> > /dev/ttymxc c 666 0 0 207 16
> > に変更し、Makeし直した所、/dev/ttymxc1は666(crw-rw-rw-)になりました。
>
> これ、できました?
> Armadillo-440でやってみましたが、できませんでした。

中村様
申し訳ありません。/etc/config/rc.localに追記していた、chmodの記述を消し忘れておりました。
確かにvendors/AtmarkTechno/Armadillo-440/ext2_devtable.txtの変更だけでは、
パーミッションは変更されておりませんでした。