suke_suta
2024年9月13日 15時57分
お世話になります
DTBの作成と書き込み、書き換えについて質問したいです
https://manual.atmark-techno.com/armadillo-iot-a6/armadillo-iota6_produ…
Howtoを基に作業を行いピンを選択すると添付した画像のように表示され、図22.13 DTS/DTBの生成完了
とは違う場所に保存されているように見えます
ファイル | ファイルの説明 |
---|---|
SAVE.png |
コメント
at_shota.shimoyama
下山です。
申し訳ありません。マニュアルの図22.13の画像は、古いバージョンのat-dtwebでの画像のままとなっておりました。
現在のバージョンでは最初に添付いただいた画像のとおり、生成されたDTS/DTBがどの場所に保存されたかが表示されます。
また、添付いただいた2つ目の画像の右のとおり、
[ATDE ~/linux-v4.14-at[version]]$ ls arch/arm/boot/dts/armadillo-iotg-a6-expansion-interface.dtsi arch/arm/boot/dts/armadillo-iotg-a6-expansion-interface.dtsi [ATDE ~/linux-v4.14-at[version]]$ ls arch/arm/boot/dts/armadillo-iotg-a6-at-dtweb.dtb arch/arm/boot/dts/armadillo-iotg-a6-at-dtweb.dtb
と表示されるのが正常な挙動です。
マニュアルに記載されている挙動(添付いただいた画像の左)は誤りです。
申し訳ありません。
> この状態では squashfs イメージを作成しても書き込むことはできないですか?
とのことですが、
Howtoの22.1~22.4の内容はデバイスツリー(DTS/DTB)に関連する内容ですが、
その後の22.5の内容であるsquashfsは、それまでの22.1~22.4とは全く別の内容となっております。
ですので、22.1~22.4の手順で詰まったとしても、問題なく22.5の手順を行うことができるはずです。
またこの後の手順としては、おそらく、ご質問者様が生成したDTBでArmadillo内のDTBを書き換えたいのではないかと推察いたします。
その場合は、
1.生成したDTBをArmadilloに転送した上で(転送方法はUSBメモリを使用する方法でもSCPを使用する方法でも何でも構いません)
2.https://manual.atmark-techno.com/armadillo-iot-a6/armadillo-iota6_produ… の「12.2.3. DTBの書き換え」を行い
3.Armadilloを再起動してください。
ところで、USBメモリによるファイルの移し方について、ご不明な点などはございませんでしょうか?
よろしくおねがいいたします。
suke_suta
ありがとうございます、高橋です
>
>
> その後の22.5の内容であるsquashfsは、それまでの22.1~22.4とは全く別の内容となっております。
> ですので、22.1~22.4の手順で詰まったとしても、問題なく22.5の手順を行うことができるはずです。
つまり、DTBの書き換えについては22.5の手順はする必要がないという事でよいですか?
> またこの後の手順としては、おそらく、ご質問者様が生成したDTBでArmadillo内のDTBを書き換えたいのではないかと推察いたします。
> ところで、USBメモリによるファイルの移し方について、ご不明な点などはございませんでしょうか?
ddコマンドでUSBに移すと思うのですがその正確なコマンドが理解できていないので教えていただきたいです
また、USBに移した後は、どのような操作をすればよいですか?
またSCPでて転送する場合、arch/arm/boot/dts/armadillo-iotg-a6-at-dtweb.dtb のファイルを指定すれば良いですか?
それとarmadilloのIPアドレスの調べ方を教えていただきたいです
LANをarmadilloに接続し、IPアドレスを調べるソフトを使っても、同じMACアドレスになるものが出てきません
armadilloにログインした状態で hostname -i で調べたIPアドレスを検索してもMACアドレスが一致せず、正確なIPがわからない状態です
> よろしくおねがいいたします。
at_shinya.koga
アットマークテクノの古賀です。
高橋さん:
>>その後の22.5の内容であるsquashfsは、それまでの22.1~22.4とは全く別の内容となっております。
>>ですので、22.1~22.4の手順で詰まったとしても、問題なく22.5の手順を行うことができるはずです。
>
>つまり、DTBの書き換えについては22.5の手順はする必要がないという事でよいですか?
はい、そうです。
DTB の書き換えについては、22.5(「eMMC の GPP(General Purpose Partition) を利用する」)は関係ありませんし、22.4(「ルートファイルシステムへの書き込みと電源断からの保護機能」)とも関係ありません。
22.2(「イメージをカスタマイズする」)と 22.3(「Device Treeをカスタマイズする」)の手順は、Linux カーネルのイメージファイルと DTB をカスタマイズする手順ですが、カスタマイズして作ったイメージファイルを書きこむ手順は、第12章の「イメージファイルの書き換え方法」で説明しています:
https://manual.atmark-techno.com/armadillo-iot-a6/armadillo-iota6_produ…
22.2 や 22.3 は、マニュアルの最後の章の Howto の節ですが、それより前にある第12章との繋がりが明記されておらず、少々分かりづらいかも知れません。ごめんなさい。
DTB を書き換える手順は、12章にある「12.2.3. DTBの書き換え」をご覧ください:
https://manual.atmark-techno.com/armadillo-iot-a6/armadillo-iota6_produ…
>>またこの後の手順としては、おそらく、ご質問者様が生成したDTBでArmadillo内のDTBを書き換えたいのではないかと推察いたします。
>>ところで、USBメモリによるファイルの移し方について、ご不明な点などはございませんでしょうか?
>
>ddコマンドでUSBに移すと思うのですがその正確なコマンドが理解できていないので教えていただきたいです
>また、USBに移した後は、どのような操作をすればよいですか?
>またSCPでて転送する場合、arch/arm/boot/dts/armadillo-iotg-a6-at-dtweb.dtb のファイルを指定すれば良いですか?
ATDE(PC)で作った DTB ファイルを Armadillo に USB メモリ経由でコピーする場合、dd コマンドは不要で、cp コマンドでコピーすればよいです。
大まかには、次の手順です:
1.) USB メモリを、ATDE を動かしている PC に装着する。
2.) USB メモリを ATDE にマウントする。
3.) USB メモリをマウントしたディレクトリに、DTB ファイルをコピーする。
4.) USB メモリを ATDE からアンマウントする。
5.) USB メモリを Armadillo に装着する。
6.) USB メモリをマウントする。
7.) USB メモリをマウントしたディレクトリから DTB ファイルをコピーする。
8.) コピーした DTB ファイルを「12.2.3. DTBの書き換え」の手順で eMMC の第2パーティションの boot/ ディレクトリにコピーする。
USB メモリを Armadillo に装着してマウントする手順は、FAQ の「Armadillo で USBメモリを使うには?」が参考になると思います:
https://armadillo.atmark-techno.com/faq/using-usb-memory
いかがでしょうか?
>それとarmadilloのIPアドレスの調べ方を教えていただきたいです
>LANをarmadilloに接続し、IPアドレスを調べるソフトを使っても、同じMACアドレスになるものが出てきません
「IPアドレスを調べるソフト」というのは、何をお使いでしょうか?
>armadilloにログインした状態で hostname -i で調べたIPアドレスを検索してもMACアドレスが一致せず、正確なIPがわからない状態です
マニュアルの第6章「動作確認方法」にある「6.2.2. 有線 LAN の設定方法」では、ip コマンドを使う手順を説明しています。
https://manual.atmark-techno.com/armadillo-iot-a6/armadillo-iota6_produ…
次のコマンドを実行した時に出力される IP アドレスが、hostname -i が出力する IP アドレスと違っていたら、ip コマンドが出力した方の IP アドレスを使ってください。
[armadillo ~]# ip address | grep eth0
suke_suta
at_shota.shimoyama
下山です。
■ ファイルをコピーするコマンドについて
まず、ファイルをコピーするコマンドには大きく2種類、
・cpコマンド
・ddコマンド
があります。
ddコマンドの方が汎用的ですが、その分、操作を誤ると簡単にデータが破損してしまうため、
今回のようなUSBメモリを介したファイルの移動についてはcpコマンドを使用してください。
以下では、cpコマンドで説明します。
■ USBメモリのマウント方法について
ATDEやArmadilloなどのLinuxにおいては、
USBメモリなどの外部デバイスを接続すると、まず/dev/ディレクトリにそのデバイスがファイルとして表示されます。
例えばATDEの場合、USBメモリの接続前では
atmark@atde8:~$ ls /dev/sd* /dev/sda /dev/sda1 /dev/sda2 /dev/sda5
となり、sdなんとかと付くものはsdaとそのパーティション(sda1、sda2、sda5)しかありませんが、
USBメモリの接続後では
atmark@atde8:~$ ls /dev/sd* /dev/sda /dev/sda1 /dev/sda2 /dev/sda5 /dev/sdb /dev/sdb1
となり、sdbとそのパーティション(sdb1)が新たに見えるようになるはずですので、ご確認ください。
(このsdbとsdb1はUSBメモリのことを指しています)
ですので、USBメモリやSDカードのような外部デバイスを接続した際には、
「まず/dev/ディレクトリに表示されるんだな」というご理解が必要になります。
そして、まだこのままではUSBメモリ内のファイルにアクセスすることはできません。
仮にUSBメモリ内にtest.txtというようなファイルが存在していたとしても、
atmark@atde8:~$ ls /dev/sdb1 /dev/sdb1
のように、USBメモリの中身を見ることができません。
USBメモリ内のファイルにアクセスするためには、mountコマンドを使用した「マウント」という以下の操作が必要になります。
atmark@atde8:~$ sudo mount /dev/sdb1 /mnt
mountコマンドを使用する際には、
・どのデバイスをマウントするか
・どのディレクトリにマウントするか
の2つを指定する必要があります。
/dev/sdb1がどのデバイスをマウントするか(USBメモリ)で、
/mntがどのディレクトリにマウントするかを指定したものです。
/mntというのは、ルートディレクトリ(/)に元々存在しているディレクトリです。
(以下のlsコマンドを実行すると、ルートディレクトリ内の一覧の中にmntがあるはずです)
/mntである必要性はないのですが、ここでは/mntを指定しました。
atmark@atde8:~$ ls / bin home lib32 media root sys vmlinuz boot initrd.img lib64 mnt run tmp vmlinuz.old dev initrd.img.old libx32 opt sbin usr etc lib lost+found proc srv var
上記のmountコマンドでマウントを行った後に、マウント先として指定したディレクトリの中身を見ると、
USBメモリ内のファイルやディレクトリなどが見られるはずです。
これでようやくUSBメモリ内のファイルにアクセス(コピーなども)することができます。
atmark@atde8:~$ ls /mnt test.txt
■ ファイルのコピー
ファイルをコピーするcpコマンドの使い方はシンプルで、
cp [コピー元のファイル] [コピー先のディレクトリ]
とするだけです。コピー元またはコピー先がUSBメモリだからといって、なにか特別な操作は必要ありません。
USBメモリ内のファイルは/mnt以下に見えていますから、そのファイルを指定するだけになります。
例えば、カレントディレクトリ(./)にあるtest.txtをUSBメモリ内にコピーするには、
atmark@atde8:~$ cp ./test.txt /mnt
としてください。USBメモリ内にコピーする操作ですので、
うまくコピーできたかどうかは/mnt内をlsコマンドで確認した際にtest.txtがあるかどうかで確認できます。
atmark@atde8:~$ ls /mnt test.txt
逆に、USBメモリ内のtest.txtをカレントディレクトリ(./)にコピーするには、
atmark@atde8:~$ cp /mnt/test.txt ./
としてください。
■ USBメモリのアンマウント
USBメモリを取り外す際には、umountコマンドを使って必ずアンマウントを行ってください。
Windowsの「ハードウェアの安全な取り外し」と同じような概念になります。
sudo umount /mnt
umountの後ろには、mountの際にマウント先として指定したディレクトリを指定します(/mnt)
ご自身のATDEやArmadilloで転送したいファイルなどに置き換えて、以上の操作を行ってみてください。
よろしくお願いします。
suke_suta
ありがとうございます、高橋です
この手順で行わさせていただきます
もしSCPで転送する場合のコマンドは
scp atmark@(atmarkのIPアドレス):~/arch/arm/boot/dts/armadillo-iotg-a6-at-dtweb.dtb ./
で良いのでしょうか? 試してみても
oot@armadillo:~#
-at-dtweb.dtb ./# scp atmark@192.168.1.209:~/arch/arm/boot/dts/armadillo-iotg-a
atmark@192.168.1.209's password:
scp: /home/atmark/arch/arm/boot/dts/armadillo-iotg-a6-at-dtweb.dtb: No such fily
このようになって仮想マシンからのコピーができません
suke_suta
高橋です
>
> ■ ファイルのコピー
> ファイルをコピーするcpコマンドの使い方はシンプルで、
> cp [コピー元のファイル] [コピー先のディレクトリ]
> とするだけです。コピー元またはコピー先がUSBメモリだからといって、なにか特別な操作は必要ありません。
> USBメモリ内のファイルは/mnt以下に見えていますから、そのファイルを指定するだけになります。
>
cp /home/atmark/linux-v4.14-at65/arch/arm/boot/dts/armadillo-iotg-a6-at-dtweb.dtb
cp: '/home/atmark/linux-v4.14-at65/arch/arm/boot/dts/armadillo-iotg-a6-at-dtweb.dtb' の後に宛先のファイルオペランドがありません
Try 'cp --help' for more information.
こうなってしまいますが、何が間違っているのでしょうか?
at_shota.shimoyama
下山です。
■ scpについて
scp: /home/atmark/arch/arm/boot/dts/armadillo-iotg-a6-at-dtweb.dtb: No such file or directory
こちらのエラー文が出たということですが、この No such file or directory というのは「そのようなファイルやディレクトリはありません」という意味です。
つまり、「/home/atmark/arch/arm/boot/dts/armadillo-iotg-a6-at-dtweb.dtbというファイルを探してみたけど無かったよ」と言われているわけですね。
ATDEやArmadilloに限らずLinuxで何か操作を行っていると「No such file or directory」というエラー文に度々遭遇することになるはずです。
この場合の対処法としては、
・無いと言われているファイルやディレクトリが本当に無いのか自分で確かめる
・自分で正しく入力したつもりのファイルやディレクトリのパスが間違ってないか(スペルミスも含めて)確かめる
になります。
おそらくですが、/home/atmark/arch/arm/boot/dts/armadillo-iotg-a6-at-dtweb.dtbというファイルは本当に無いはずです。
途中のlinux-v4.14-at65が抜けていて、正しくは、/home/atmark/linux-v4.14-at65/arch/arm/boot/dts/armadillo-iotg-a6-at-dtweb.dtbではないでしょうか?
この部分以外のscpコマンドは正しいかと思われます。
■ cpについて
> cp /home/atmark/linux-v4.14-at65/arch/arm/boot/dts/armadillo-iotg-a6-at-dtweb.dtb
> cp: '/home/atmark/linux-v4.14-at65/arch/arm/boot/dts/armadillo-iotg-a6-at-dtweb.dtb' の後に宛先のファイルオペランドがありません
> Try 'cp --help' for more information.
> こうなってしまいますが、何が間違っているのでしょうか?
「cp: '/home/atmark/linux-v4.14-at65/arch/arm/boot/dts/armadillo-iotg-a6-at-dtweb.dtb' の後に宛先のファイルオペランドがありません」というエラー文がでていますが、このとおり、宛先を指定されていないようです。
cpコマンドの使い方は、
cp [コピー元のファイル] [コピー先のディレクトリ]
となります。
入力されたコマンドを拝見すると、[コピー元のファイル]として「/home/atmark/linux-v4.14-at65/arch/arm/boot/dts/armadillo-iotg-a6-at-dtweb.dtb」を指定することはできていますが、その後に指定するべき[コピー先のディレクトリ]に何も指定されていないようです。
「の後に宛先のファイルオペランドがありません」というのはこういう意味になります。
上の返信で、./test.txtファイルを/mntディレクトリにコピーする例として
atmark@atde8:~$ cp ./test.txt /mnt
を紹介しましたが、この例では、
・[コピー元のファイル]が「./test.txt」
・[コピー先のディレクトリ]が「/mnt」
に対応しています。このコマンドをよくご覧いただくと、./test.txtと/mntの間にスペースが1つ入っているのがお分かりでしょうか?
[コピー先のディレクトリ]を指定する際は、
cp /home/atmark/linux-v4.14-at65/arch/arm/boot/dts/armadillo-iotg-a6-at-dtweb.dtb [コピー先のディレクトリ]
のように、スペースを一ついれてから入力してください。
よろしくお願いします。
suke_suta
at_shota.shimoyama
下山です。
> ところでDTBの書き換えに使うファイルは
> 22.3.3の最後に出ている
>
> armadillo-iotg-a6-at-dtweb.dtb
>
> のファイルではなく
>
> armadillo-iotg-a6-v4.14at[version].dtb
>
> というものを使うということで良いですか?
https://manual.atmark-techno.com/armadillo-iot-a6/armadillo-iota6_produ… のコマンドのことですね。
いいえ、「armadillo-iotg-a6-v4.14at[version].dtb」を「armadillo-iotg-a6-at-dtweb.dtb」と置き換えてお読みになってください。
よろしくお願いします。
suke_suta
at_shota.shimoyama
下山です。
書き換えができたかどうかはmd5sumコマンドを使用して、ファイルのハッシュ値が同じかどうか確認するという方法でできます。
Armadillo内に書き込んだa640.dtbのハッシュ値をmd5sumコマンドで出力し、
一方で、ATDE内のarmadillo-iotg-a6-at-dtweb.dtbのハッシュ値もmd5sumコマンドで出力します。
この2つの出力結果を目視で確認して、同じであれば書き換えができたことになります。
また、dtbファイルを作成したということは、Armadilloに接続されるデバイスの挙動(おそらくCON3でしょうか?)を変更したいという背景があるのではないかと思われます。
書き換え後にArmadilloを再起動し、そのデバイスの挙動が期待通りになっていれば書き換えができたということにもなると思います。
よろしくおねがいします。
suke_suta
ありがとうございます、確認してみます
おっしゃる通りサブユニットのCON3でUART通信を有効化する目的です
追加の質問として
armadillo内のファイルの配置についてですが現在armadilloのホームディレクトリを確認すると
root@armadillo:~# ls
ECDSA aaaa.py bbbb-a.py cccc.py
armadillo-iotg-a6-at-dtweb.dtb dddd-dddd eeee-b.py ffff.py
上のような状態で表示されています
ホームディレクトリに別々に保存されているなら縦並びに表示されると思うのですが、この状態でも1つづつ分かれて保存されている
という認識で良いでしょうか?
また ECDSA が保存されていますが、ATDE上には存在していません、このファイルは何を意味してるのでしょうか?
suke_suta
at_shota.shimoyama
下山です。
> ホームディレクトリに別々に保存されているなら縦並びに表示されると思うのですが、この状態でも1つづつ分かれて保存されている
> という認識で良いでしょうか?
この状態でも1つずつ分かれて保存されているという認識で間違いないです。
> また ECDSA が保存されていますが、ATDE上には存在していません、このファイルは何を意味してるのでしょうか?
名前から察するにECDSA(楕円曲線DSA署名方式)に関連するものだと思われますが、
具体的にどのようなファイルなのかは私もわかりかねます。申し訳ありません。
初期状態のArmadilloにはそのようなファイルは存在しませんので、ご自身でArmadilloに対して何らかの操作を行った際に生成されたものではないかと思われます。
> 現在自分のarmadilloでTTYと入力して調べてみると /dev/ttymxc2 となっています
Armadilloで
root@armadillo:~# tty /dev/ttymxc2
のようになったということですね。
まず、ttymxc0があるかどうかはttyコマンドでは確認できません。
デバイスファイル(外部から接続するUSBメモリなどの機器や、ArmadilloのCON3のUARTなどにアクセスするためのファイル)は、
/devディレクトリに配置されます。
ですので、ttymxc0があるかどうかは/devディレクトリの中をlsで確認してください。
root@armadillo:~# ls /dev
たくさんのファイルが表示されるはずです。この中からttymxc0を探してください。
大変な場合は、
root@armadillo:~# ls /dev/ttym*
とすれば、「/dev/ttym」が先頭につくファイルだけが表示されて確認が楽かと思います。
DTBの書き換えでCON3のUARTが正常に使えるようになっていれば、おそらく以下のように/dev/ttymxc0が表示されるはずです。
root@armadillo:~# ls /dev/ttym* /dev/ttymxc0 /dev/ttymxc1 /dev/ttymxc2
よろしくおねがいします
suke_suta
suke_suta
2024年9月13日 16時16分
すいません、続きになります
保存先を開いてみると、Howtoとは違う場所に保存されているように見えます
この状態では squashfs イメージを作成しても書き込むことはできないですか?
また、USBを使用して書き込む以外にもscp コマンドを使用して書き込むことは可能ですか?
もし可能であれば両方での書き込み方法を教えていただきたいです。よろしくお願いします