Armadilloフォーラム

DTBの作成と書き込みと書き換えについて

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
コメント

すいません、続きになります

保存先を開いてみると、Howtoとは違う場所に保存されているように見えます

この状態では squashfs イメージを作成しても書き込むことはできないですか?

また、USBを使用して書き込む以外にもscp コマンドを使用して書き込むことは可能ですか?

もし可能であれば両方での書き込み方法を教えていただきたいです。よろしくお願いします

ファイル ファイルの説明
保存先.png

at_shota.shimoyama

2024年9月13日 17時29分

下山です。

申し訳ありません。マニュアルの図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メモリによるファイルの移し方について、ご不明な点などはございませんでしょうか?

よろしくおねがいいたします。

ありがとうございます、高橋です
>

>
> その後の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がわからない状態です

> よろしくおねがいいたします。

アットマークテクノの古賀です。

高橋さん:
>>その後の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

高橋です、ありがとうございます

> USB メモリをマウントしたディレクトリに、DTB ファイルをコピーする。

ための dd=if コマンドを教えていただけますか?

DBTの書き込みが完了し次第IPを調べてみます

at_shota.shimoyama

2024年9月17日 11時25分

下山です。

■ ファイルをコピーするコマンドについて
まず、ファイルをコピーするコマンドには大きく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で転送したいファイルなどに置き換えて、以上の操作を行ってみてください。
よろしくお願いします。

ありがとうございます、高橋です

この手順で行わさせていただきます

もし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

このようになって仮想マシンからのコピーができません

高橋です
>
> ■ ファイルのコピー
> ファイルをコピーする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

2024年9月18日 11時15分

下山です。

■ 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 [コピー先のディレクトリ]

のように、スペースを一ついれてから入力してください。

よろしくお願いします。

高橋です

ありがとうございます、コピーする事ができました

ところでDTBの書き換えに使うファイルは
22.3.3の最後に出ている

armadillo-iotg-a6-at-dtweb.dtb

のファイルではなく

armadillo-iotg-a6-v4.14at[version].dtb

というものを使うということで良いですか?

at_shota.shimoyama

2024年9月18日 13時06分

下山です。

> ところで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」と置き換えてお読みになってください。

よろしくお願いします。

高橋ですありがとうございます

いいえ、「armadillo-iotg-a6-v4.14at[version].dtb」を「armadillo-iotg-a6-at-dtweb.dtb」と置き換えてお読みになってください。

変えたところ書きかえができたと思います、これを確認することは可能でしょうか?

at_shota.shimoyama

2024年9月18日 14時34分

下山です。

書き換えができたかどうかはmd5sumコマンドを使用して、ファイルのハッシュ値が同じかどうか確認するという方法でできます。

Armadillo内に書き込んだa640.dtbのハッシュ値をmd5sumコマンドで出力し、
一方で、ATDE内のarmadillo-iotg-a6-at-dtweb.dtbのハッシュ値もmd5sumコマンドで出力します。
この2つの出力結果を目視で確認して、同じであれば書き換えができたことになります。

また、dtbファイルを作成したということは、Armadilloに接続されるデバイスの挙動(おそらくCON3でしょうか?)を変更したいという背景があるのではないかと思われます。
書き換え後にArmadilloを再起動し、そのデバイスの挙動が期待通りになっていれば書き換えができたということにもなると思います。

よろしくおねがいします。

ありがとうございます、確認してみます
おっしゃる通りサブユニットの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上には存在していません、このファイルは何を意味してるのでしょうか?

重ねて質問をさせて頂きます、申し訳ありません
armadilloフォーラムを調べていたところ

armadillo iot A6 サブユニット CN3 UART の device は何でしょうか?

の回答に /dev/ttymxc0として制御 というものがありました、これはどういった意味でしょうか?
現在自分のarmadilloでTTYと入力して調べてみると /dev/ttymxc2 となっています
これを切り替える必要があるということですか?
切り替えるコマンドがあれば教えていただきたいです

よろしくお願いします

at_shota.shimoyama

2024年9月19日 16時38分

下山です。

> ホームディレクトリに別々に保存されているなら縦並びに表示されると思うのですが、この状態でも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

よろしくおねがいします

高橋です

> DTBの書き換えでCON3のUARTが正常に使えるようになっていれば、おそらく以下のように/dev/ttymxc0が表示されるはずです。
>

> root@armadillo:~# ls /dev/ttym*
> /dev/ttymxc0  /dev/ttymxc1  /dev/ttymxc2
> 

>
ありがとうございます
このように表示され無事に書き換えされていることを確認できました

root@armadillo:~# ls /dev/ttym*
/dev/ttymxc0 /dev/ttymxc1 /dev/ttymxc2