Armadilloフォーラム

Linuxイメージのコンパイルの失敗

fukasawa

2021年4月22日 11時08分

平素よりお世話になっております。

at-dtwebを使用して、ハードウェアをカスタマイズしようとしたところ、添付画像のエラーが発生してしまいました。
at-dtwebの変更をもとに戻しても、`Save`時にやはり同様のエラーが発生してしまいます。

その後、Linuxイメージを再度コンパイルしようとしたところ、下記のエラーが発生しました。
原因わかりますでしょうか。

atmark@atde7:~/Linux_kernel/linux-v4.14-at20$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOADADDR=0x8200000 uImage
  CHK     include/config/kernel.release
  CHK     include/generated/uapi/linux/version.h
  CHK     include/generated/utsrelease.h
  CHK     include/generated/bounds.h
  CHK     include/generated/timeconst.h
  CHK     include/generated/asm-offsets.h
  CALL    scripts/checksyscalls.sh
  CHK     scripts/mod/devicetable-offsets.h
  CHK     include/generated/compile.h
  CHK     kernel/config_data.h
  Kernel: arch/arm/boot/Image is ready
  Kernel: arch/arm/boot/zImage is ready
  Kernel: arch/arm/boot/uImage is ready
atmark@atde7:~/Linux_kernel/linux-v4.14-at20$ 
atmark@atde7:~/Linux_kernel/linux-v4.14-at20$ 
atmark@atde7:~/Linux_kernel/linux-v4.14-at20$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  CHK     include/config/kernel.release
  CHK     include/generated/uapi/linux/version.h
  CHK     include/generated/utsrelease.h
  CHK     include/generated/bounds.h
  CHK     include/generated/timeconst.h
  CHK     include/generated/asm-offsets.h
  CALL    scripts/checksyscalls.sh
  CHK     scripts/mod/devicetable-offsets.h
  CHK     include/generated/compile.h
  CHK     kernel/config_data.h
  Kernel: arch/arm/boot/Image is ready
  Kernel: arch/arm/boot/zImage is ready
  DTC     arch/arm/boot/dts/armadillo-640.dtb
Error: arch/arm/boot/dts/armadillo-640.dts:24.14-15 syntax error
FATAL ERROR: Unable to parse input tree
scripts/Makefile.lib:317: ターゲット 'arch/arm/boot/dts/armadillo-640.dtb' のレシピで失敗しました
make[1]: *** [arch/arm/boot/dts/armadillo-640.dtb] エラー 1
arch/arm/Makefile:348: ターゲット 'dtbs' のレシピで失敗しました
make: *** [dtbs] エラー 2
atmark@atde7:~/Linux_kernel/linux-v4.14-at20$ 

エラーメッセージ内に記載のある、`armadillo-640.dts`のファイルを添付します。
ただ、at-dtwebやLinuxイメージのコンパイル自体が久しぶりなので、
今回の変更前からコンパイルできない状態になっていたかもしれません。

行いたいハードウェアの構成は以下のもので、最後の変更以外は過去に行って稼働しています。

- UART1(CON9-3,4pin)
- UART2(CON9-25~28pin)※CTSとRTSも使用
- UART3(CON3/4)※u-bootでコンソールに設定
- AWL13(CON9-11~24pin)
- UART5(CON9-4,5pin)※NEW

コメント

at_akihito.irie

2021年4月22日 15時02分

入江です。

1点確認させてください。

添付頂いたarmadillo-640.dtsが、armadillo-640_con9_awl13_rtc.dtsと同一
の内容のものとなっています。

添付のミスでしょうか、それとも添付頂いたファイルがarmadillo-640.dtsと
して配置されていますでしょうか。

armadillo-640.dtsとして配置されているのであれば、修正して頂いた上で再
度dtbのビルドを試していただけますでしょうか。

linux-4.14-at20のソースコードは以下からダウンロードできます。
https://download.atmark-techno.com/armadillo-640/source/linux-v4.14-at2…

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

> 添付頂いたarmadillo-640.dtsが、armadillo-640_con9_awl13_rtc.dtsと同一
> の内容のものとなっています。
> armadillo-640.dtsとして配置されているのであれば
はい、armadillo-640.dtsとして配置されていました。
どうもAWL13を使用するさいに、リネームして使うものだと思って変更したようです。
ファイル名を"armadillo-640_con9_awl13_rtc.dts"にしたあとに、過去の"armadillo-640.dts"を復活させて、再度コンパイルしたところ、成功しました。

その後、at-dtwebでUART5へ変更したあとの`Save`も成功しました。
まだ実機では検証していないですが、大丈夫そうです。

> まだ実機では検証していないですが、大丈夫そうです。
大丈夫ではありませんでした。

新しく作成したdtsとuImageを組み込んで、SDカードでインストールディスクイメージを作成して、Armadillo-640に書き込みしたところ、できませんでした。
書き込み時のログは以下です。

U-Boot 2018.03-at8 installer+ (Feb 17 2020 - 19:19:21 +0900)
 
CPU:   Freescale i.MX6ULL rev1.1 at 396 MHz
Reset cause: POR
I2C:   ready
DRAM:  512 MiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
In:    serial
Out:   serial
Err:   serial
PMIC: PFUZE3000 DEV_ID=0x30 REV_ID=0x11
Net:   FEC
=>
=> boot
6818656 bytes read in 351 ms (18.5 MiB/s)
27539 bytes read in 56 ms (479.5 KiB/s)
## Booting kernel from Legacy Image at 82000000 ...
   Image Name:   Linux-4.14-at20
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    6818592 Bytes = 6.5 MiB
   Load Address: 08200000
   Entry Point:  08200000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 83000000
   Booting using the fdt blob at 0x83000000
   Loading Kernel Image ... OK
   Loading Device Tree to 9eef9000, end 9ef02b92 ... OK
 
Starting kernel ...
 
prefetch abort
pc : [<081ffffc>]          lr : [<9ff85bd9>]
reloc pc : [<efa7affc>]    lr : [<87800bd9>]
sp : 9ef043e8  ip : 9ffc4c00     fp : 9ef044f0
r10: 00000003  r9 : 9ef04ec0     r8 : 9ef044f0
r7 : 00000000  r6 : 08200000     r5 : 9ffc4b20  r4 : 00000000
r3 : 00006b93  r2 : 9eef9000     r1 : 00000000  r0 : 00000000
Flags: nZCv  IRQs off  FIQs off  Mode SVC_32
Resetting CPU ...
 
resetting ...
 
 
U-Boot 2018.03-at8 installer+ (Feb 17 2020 - 19:19:21 +0900)
(略)

古いインストールディスクイメージで再度インストールディスクを作成して書き込んだところ書き込み完了して、動作しましたので
SDカード、インストールディスク作成・書込手順、Armadillo-640には問題がなさそうです。
uImage、dtbに原因がありそうです。

インストールディスクイメージ作成時のログも添付します。

sudo ./build.sh a640 ~/images/u-boot.imx ~/images/uImage ~/images/armadillo-640-at-dtweb.dtb ~/images/debian-stretch-armhf-a600-20210423.tar.gz 
[sudo] atmark のパスワード:
0+0 レコード入力
0+0 レコード出力
0 bytes copied, 0.000114467 s, 0.0 kB/s
Checking that no-one is using this disk right now ... OK
 
Disk /dev/loop0: 302 MiB, 316669952 bytes, 618496 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
 
>>> Created a new DOS disklabel with disk identifier 0x0e6b08f5.
/dev/loop0p1: Created a new partition 1 of type 'W95 FAT32' and of size 2 MiB.
/dev/loop0p2: Created a new partition 2 of type 'Linux' and of size 299 MiB.
/dev/loop0p3: Done.
 
New situation:
 
Device       Boot Start    End Sectors  Size Id Type
/dev/loop0p1       2048   6143    4096    2M  b W95 FAT32
/dev/loop0p2       6144 618495  612352  299M 83 Linux
 
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
mkfs.fat 4.1 (2017-01-24)
mke2fs 1.43.4 (31-Jan-2017)
Discarding device blocks: done                            
Creating filesystem with 306176 1k blocks and 76608 inodes
Filesystem UUID: 5f383731-0d73-4314-b158-1d6db9c5a18e
Superblock backups stored on blocks: 
	8193, 24577, 40961, 57345, 73729, 204801, 221185
 
Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done 
 
291+0 レコード入力
291+0 レコード出力
297984 bytes (298 kB, 291 KiB) copied, 0.0191807 s, 15.5 MB/s
atmark@atde7:~/make-install-disk-image-v1.1.0$ 

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

at_akihito.irie

2021年4月26日 10時44分

入江です。

> 古いインストールディスクイメージで再度インストールディスクを作成して書き込んだところ書き込み完了して、動作しましたので
> SDカード、インストールディスク作成・書込手順、Armadillo-640には問題がなさそうです。
> uImage、dtbに原因がありそうです。

お客様のご認識のとおりだと思います。

ですが、頂いた情報からだけでは原因は特定できません。
お客様の方で、
- uImageとdtbの片方ずつ標準イメージにしてみる
- 標準イメージからひとつずつ修正を加えてエラーが発生する箇所を特定する
など、問題の切り分けを行っていただけますでしょうか。

その上でエラーが発生する箇所が特定できれば、修正に関しましてこちらから
アドバイスできるかもしれません。

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

uImage、dtbを標準イメージにしても、できたり、できなかったりで、混乱していましたが、解決しました。
uImage作成時のコマンドが微妙に間違っていました。

×:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOADADDR=0x8200000 uImage
○:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOADADDR=0x82000000 uImage

`0`の数が一桁違っていたせいでした。
ありがとうございました。