目的
以下のUdemyの教材
で,Device Treeの第14章にてDTC(Device Tree Compiler)のコンパイルで以下のエラー2.2-8 syntax error
が出て,全く先に進めなかったのだが,解決策をひとつ見つけたので紹介しておく.
$ cat PCDEV0.dts /dts-v1/; /plugin/; / { fragment@0 { target = <&pcdev1>; __OVERLAY__ { status = "disabled"; }; }; fragment@1 { target = <&pcdev2>; __OVERLAY__ { status = "disabled"; }; }; fragment@2 { target = <&pcdev3>; __OVERLAY__ { org,size = <1048>; org,device-serial-num = "PCDEV4XXXXXX"; }; }; }; $ dtc -I dts -O dtb -o PCDEV0.dtbo PCDEV0.dts Error: PCDEV0.dts:2.2-8 syntax error FATAL ERROR: Unable to parse input tree
なお,使用しているLinuxディストリビューションは,Ubuntu 16.04*1で,DTCはバージョン1.4.0である.
$ uname -a Linux so2akt-VirtualBox 4.15.0-142-generic #146~16.04.1-Ubuntu SMP Tue Apr 13 09:27:15 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux $ dtc -v Version: DTC 1.4.0
結論
Ubuntu 16.04のaptでインストールされるDTCのバージョン1.4.0が古いのか,バグがあるのかという原因で,ビルドエラーが出る.そのためより新しいバージョンを使う必要があり,ソースコードからビルドして1.4.7を作るシェルがGitHubで提供されていたため,それを使うことで解決できた:
$ wget https://raw.githubusercontent.com/beagleboard/bb.org-overlays/master/dtc-overlay.sh $ sudo chmod 777 dtc-overlay.sh $ sudo -s # ./dtc-overlay.sh # dtc -v Version: DTC 1.4.7 # dtc -I dts -O dtb -o PCDEV0.dtbo PCDEV0.dts PCDEV0.dtbo: Warning (unit_address_vs_reg): /fragment@0: node has a unit name, but no reg property PCDEV0.dtbo: Warning (unit_address_vs_reg): /fragment@1: node has a unit name, but no reg property PCDEV0.dtbo: Warning (unit_address_vs_reg): /fragment@2: node has a unit name, but no reg property # ls PCDEV0.dtbo PCDEV0.dts
なお,そのシェル実行前には,念のため
$ sudo apt-get remove device-tree-compiler
にて既存のDTC 1.4.0を削除してから実行した.
詳細
Googleで検索すると,いくらか同等の現象に直面している人がいたが,なかなか対策がわからなかった.
Ubuntuの新しいものにアップグレード,または新規インストールすれば簡単に済む話でもあるが,仕事上で16.04を使う必要があってその環境をそのままこのUdemyの学習に使用しているので面倒だと考えているときに,ちょうどRaspberry Piのフォーラム
で同じ現象が紹介されており,そのリンク先にソースコードからDTCをビルドするシェルが紹介されていたので,この対策に至った*2.
コンソール実行の生データは以下のとおり:
root@so2akt-VirtualBox:~/workspace/ldd/custom_drivers/overlays# uname -a Linux so2akt-VirtualBox 4.15.0-142-generic #146~16.04.1-Ubuntu SMP Tue Apr 13 09:27:15 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux root@so2akt-VirtualBox:~/workspace/ldd/custom_drivers/overlays# cat PCDEV0.dts /dts-v1/; /plugin/; / { fragment@0 { target = <&pcdev1>; __OVERLAY__ { status = "disabled"; }; }; fragment@1 { target = <&pcdev2>; __OVERLAY__ { status = "disabled"; }; }; fragment@2 { target = <&pcdev3>; __OVERLAY__ { org,size = <1048>; org,device-serial-num = "PCDEV4XXXXXX"; }; }; }; root@so2akt-VirtualBox:~/workspace/ldd/custom_drivers/overlays# dtc -I dts -O dtb -o PCDEV0.dtbo PCDEV0.dts Error: PCDEV0.dts:2.2-8 syntax error FATAL ERROR: Unable to parse input tree root@so2akt-VirtualBox:~/workspace/ldd/custom_drivers/overlays# dtc -v Version: DTC 1.4.0 so2akt@so2akt-VirtualBox:~$ sudo apt-get remove device-tree-compiler so2akt@so2akt-VirtualBox:~/Downloads$ wget https://raw.githubusercontent.com/beagleboard/bb.org-overlays/master/dtc-overlay.sh --2023-02-16 11:28:41-- https://raw.githubusercontent.com/beagleboard/bb.org-overlays/master/dtc-overlay.sh Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.110.133, 185.199.109.133, 185.199.108.133, ... Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.110.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 1245 (1.2K) [text/plain] Saving to: ‘dtc-overlay.sh’ dtc-overlay.sh 100%[================================================================================================================>] 1.22K --.-KB/s in 0s 2023-02-16 11:28:42 (107 MB/s) - ‘dtc-overlay.sh’ saved [1245/1245] so2akt@so2akt-VirtualBox:~/Downloads$ sudo chmod 777 dtc-overlay.sh [sudo] password for so2akt: so2akt@so2akt-VirtualBox:~/Downloads$ sudo -s root@so2akt-VirtualBox:~/Downloads# ./dtc-overlay.sh Cloning into '/home/so2akt/git/dtc'... remote: Enumerating objects: 31, done. remote: Counting objects: 100% (31/31), done. remote: Compressing objects: 100% (31/31), done. remote: Total 5874 (delta 9), reused 0 (delta 0), pack-reused 5843 Receiving objects: 100% (5874/5874), 1.37 MiB | 826.00 KiB/s, done. Resolving deltas: 100% (4323/4323), done. Checking connectivity... done. CLEAN (libfdt) CLEAN (pylibfdt) CLEAN (tests) CLEAN Already on 'master' Your branch is up-to-date with 'origin/master'. Already up-to-date. Switched to a new branch 'v1.4.7-build' CLEAN (libfdt) CLEAN (pylibfdt) CLEAN (tests) CLEAN DEP tests/dumptrees.c DEP tests/trees.S DEP tests/testutils.c DEP tests/value-labels.c DEP tests/asm_tree_dump.c DEP tests/truncated_memrsv.c DEP tests/truncated_string.c DEP tests/truncated_property.c DEP tests/check_full.c DEP tests/check_header.c DEP tests/check_path.c DEP tests/overlay_bad_fixup.c DEP tests/overlay.c DEP tests/subnode_iterate.c DEP tests/property_iterate.c DEP tests/integer-expressions.c DEP tests/utilfdt_test.c DEP tests/path_offset_aliases.c DEP tests/add_subnode_with_nops.c DEP tests/dtbs_equal_unordered.c DEP tests/dtb_reverse.c DEP tests/dtbs_equal_ordered.c DEP tests/extra-terminating-null.c DEP tests/incbin.c DEP tests/boot-cpuid.c DEP tests/phandle_format.c DEP tests/path-references.c DEP tests/references.c DEP tests/string_escapes.c DEP tests/propname_escapes.c DEP tests/appendprop2.c DEP tests/appendprop1.c DEP tests/del_node.c DEP tests/del_property.c DEP tests/setprop.c DEP tests/set_name.c DEP tests/rw_tree1.c DEP tests/open_pack.c DEP tests/nopulate.c DEP tests/mangle-layout.c DEP tests/move_and_save.c DEP tests/sw_states.c DEP tests/sw_tree1.c DEP tests/nop_node.c DEP tests/nop_property.c DEP tests/setprop_inplace.c DEP tests/stringlist.c DEP tests/addr_size_cells2.c DEP tests/addr_size_cells.c DEP tests/notfound.c DEP tests/sized_cells.c DEP tests/char_literal.c DEP tests/get_alias.c DEP tests/node_offset_by_compatible.c DEP tests/node_check_compatible.c DEP tests/node_offset_by_phandle.c DEP tests/node_offset_by_prop_value.c DEP tests/parent_offset.c DEP tests/supernode_atdepth_offset.c DEP tests/get_path.c DEP tests/get_phandle.c DEP tests/getprop.c DEP tests/get_name.c DEP tests/path_offset.c DEP tests/subnode_offset.c DEP tests/find_property.c DEP tests/root_node.c DEP tests/get_mem_rsv.c DEP libfdt/fdt_overlay.c DEP libfdt/fdt_addresses.c DEP libfdt/fdt_empty_tree.c DEP libfdt/fdt_strerror.c DEP libfdt/fdt_rw.c DEP libfdt/fdt_sw.c DEP libfdt/fdt_wip.c DEP libfdt/fdt_ro.c DEP libfdt/fdt.c DEP util.c DEP fdtoverlay.c DEP fdtput.c DEP fdtget.c DEP fdtdump.c LEX convert-dtsv0-lexer.lex.c DEP convert-dtsv0-lexer.lex.c DEP srcpos.c BISON dtc-parser.tab.c DEP dtc-parser.tab.c LEX dtc-lexer.lex.c DEP dtc-lexer.lex.c DEP treesource.c DEP livetree.c DEP fstree.c DEP flattree.c DEP dtc.c DEP data.c DEP checks.c CHK version_gen.h UPD version_gen.h DEP util.c CHK version_gen.h CC srcpos.o CC util.o CC convert-dtsv0-lexer.lex.o LD convert-dtsv0 CC dtc.o CC checks.o CC data.o CC flattree.o CC fstree.o CC livetree.o CC treesource.o CC dtc-lexer.lex.o CC dtc-parser.tab.o LD dtc CC fdtdump.o LD fdtdump CC fdtget.o CC libfdt/fdt.o CC libfdt/fdt_ro.o CC libfdt/fdt_wip.o CC libfdt/fdt_sw.o CC libfdt/fdt_rw.o CC libfdt/fdt_strerror.o CC libfdt/fdt_empty_tree.o CC libfdt/fdt_addresses.o CC libfdt/fdt_overlay.o AR libfdt/libfdt.a LD fdtget CC fdtput.o LD fdtput CC fdtoverlay.o LD fdtoverlay LD libfdt/libfdt-1.4.7.so ## Skipping pylibfdt (install python dev and swig to build) Installing into: /usr/local/bin/ CHK version_gen.h ## Skipping pylibfdt (install python dev and swig to build) INSTALL-BIN INSTALL-LIB INSTALL-INC ## Skipping pylibfdt (install python dev and swig to build) dtc: Version: DTC 1.4.7 root@so2akt-VirtualBox:~/Downloads# dtc -v Version: DTC 1.4.7 root@so2akt-VirtualBox:~/workspace/ldd/custom_drivers/overlays# dtc -I dts -O dtb -o PCDEV0.dtbo PCDEV0.dts PCDEV0.dtbo: Warning (unit_address_vs_reg): /fragment@0: node has a unit name, but no reg property PCDEV0.dtbo: Warning (unit_address_vs_reg): /fragment@1: node has a unit name, but no reg property PCDEV0.dtbo: Warning (unit_address_vs_reg): /fragment@2: node has a unit name, but no reg property root@so2akt-VirtualBox:~/workspace/ldd/custom_drivers/overlays# ls PCDEV0.dtbo PCDEV0.dts
参考サイト
リンク先はすべて2023/02/16現在のもの