portapack-mayhem/mayhem-firmware のビルド
By takagiwa on Tuesday, April 30 2024, 22:21 - Permalink
2024 Apr 30 に試した内容
基本的には Using ARM on Debian の内容を実行。
環境はこちら
(2024 May 1st 追記:Ubuntu で生成した bin ファイルは実機で Bad Firmware と判定されてしまった。Debian 10 で生成したものは動いた)
$ uname -a Linux ubuntu 5.15.146.1-microsoft-standard-WSL2 #1 SMP Thu Jan 11 04:09:03 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux $ cat /etc/os-release PRETTY_NAME="Ubuntu 22.04.4 LTS" NAME="Ubuntu" VERSION_ID="22.04" VERSION="22.04.4 LTS (Jammy Jellyfish)" VERSION_CODENAME=jammy ID=ubuntu ID_LIKE=debian HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" UBUNTU_CODENAME=jammy
Debian の環境
$ uname -a Linux xxxx 5.15.146.1-microsoft-standard-WSL2 #1 SMP Thu Jan 11 04:09:03 UTC 2024 x86_64 GNU/Linux $ cat /etc/os-release PRETTY_NAME="Debian GNU/Linux 11 (bullseye)" NAME="Debian GNU/Linux" VERSION_ID="11" VERSION="11 (bullseye)" VERSION_CODENAME=bullseye ID=debian HOME_URL="https://www.debian.org/" SUPPORT_URL="https://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/"
$ sudo apt update $ sudo apt-get install -y git tar wget dfu-util cmake python3 bzip2 lz4 curl hackrf python3-distutils python3-setuptools $ git config --global core.autocrlf false $ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py; python3 get-pip.py $ export PATH=$PATH:/home/user/.local/bin $ pip install pyyaml $ sudo mkdir /opt/build $ cd /opt/build $ sudo wget -O gcc-arm-none-eabi.tar.bz2 'https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2020q2/gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2?revision=05382cca-1721-44e1-ae19-1e7c3dc96118&la=en&hash=D7C9D18FCA2DD9F894FD9F3C3DC9228498FA281A' $ sudo mkdir armbin $ sudo tar --strip=1 -xjvf gcc-arm-none-eabi.tar.bz2 -C armbin $ echo 'PATH=/opt/build/armbin/bin:/opt/build/armbin/lib:/home/user/.local/bin:$PATH' >> ~/.bashrc $ cd /opt $ sudo git clone --recurse-submodules https://github.com/portapack-mayhem/mayhem-firmware.git $ sudo chown -R user:user /opt/mayhem-firmware $ cd /opt/mayhem-firmware/ $ mkdir build $ cd build $ source ~/.bashrc $ cmake .. $ make $ make build_tests $ apt search g++ $ sudo apt install -y g++ $ make build_tests
最後のテストでは g++ が無いといわれ、インストールして再度実行したら以下のようなエラーになった。
$ make build_tests [ 0%] Building CXX object firmware/test/baseband/CMakeFiles/baseband_test.dir/main.cpp.obj [ 0%] Building CXX object firmware/test/baseband/CMakeFiles/baseband_test.dir/dsp_fft_test.cpp.obj [ 0%] Building CXX object firmware/test/baseband/CMakeFiles/baseband_test.dir/__/__/common/dsp_fft.cpp.obj [ 0%] Linking CXX executable baseband_test [ 0%] Built target baseband_test [ 0%] Building CXX object firmware/test/application/CMakeFiles/application_test.dir/main.cpp.obj [ 0%] Building CXX object firmware/test/application/CMakeFiles/application_test.dir/test_basics.cpp.obj [ 0%] Building CXX object firmware/test/application/CMakeFiles/application_test.dir/test_circular_buffer.cpp.obj [ 0%] Building CXX object firmware/test/application/CMakeFiles/application_test.dir/test_convert.cpp.obj [ 0%] Building CXX object firmware/test/application/CMakeFiles/application_test.dir/test_file_reader.cpp.obj [ 0%] Building CXX object firmware/test/application/CMakeFiles/application_test.dir/test_file_wrapper.cpp.obj [ 0%] Building CXX object firmware/test/application/CMakeFiles/application_test.dir/test_freqman_db.cpp.obj [ 0%] Building CXX object firmware/test/application/CMakeFiles/application_test.dir/test_mock_file.cpp.obj [ 0%] Building CXX object firmware/test/application/CMakeFiles/application_test.dir/test_optional.cpp.obj [ 0%] Building CXX object firmware/test/application/CMakeFiles/application_test.dir/test_string_format.cpp.obj [ 0%] Building CXX object firmware/test/application/CMakeFiles/application_test.dir/test_utility.cpp.obj [ 0%] Building CXX object firmware/test/application/CMakeFiles/application_test.dir/__/__/application/file_reader.cpp.obj [ 0%] Building CXX object firmware/test/application/CMakeFiles/application_test.dir/__/__/application/freqman_db.cpp.obj [ 0%] Building CXX object firmware/test/application/CMakeFiles/application_test.dir/__/__/common/utility.cpp.obj /opt/mayhem-firmware/firmware/common/utility.cpp: In function ‘uint32_t simple_checksum(uint32_t, uint32_t)’: /opt/mayhem-firmware/firmware/common/utility.cpp:242:22: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 242 | checksum += *(uint32_t*)(buffer_address + i); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ 0%] Building CXX object firmware/test/application/CMakeFiles/application_test.dir/__/__/application/file.cpp.obj [ 0%] Building CXX object firmware/test/application/CMakeFiles/application_test.dir/__/__/application/string_format.cpp.obj [ 0%] Building CXX object firmware/test/application/CMakeFiles/application_test.dir/__/__/application/tone_key.cpp.obj [100%] Building CXX object firmware/test/application/CMakeFiles/application_test.dir/linker_stubs.cpp.obj [100%] Linking CXX executable application_test /usr/bin/ld: CMakeFiles/application_test.dir/__/__/application/freqman_db.cpp.obj: warning: relocation against `freqman_dir' in read-only section `.text' /usr/bin/ld: CMakeFiles/application_test.dir/__/__/application/freqman_db.cpp.obj: in function `get_freqman_path(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': freqman_db.cpp:(.text+0x43a): undefined reference to `freqman_dir' /usr/bin/ld: CMakeFiles/application_test.dir/__/__/application/file.cpp.obj: in function `file_update_date(std::filesystem::path const&, FATTimestamp)': file.cpp:(.text+0x19d0): undefined reference to `f_utime' /usr/bin/ld: warning: creating DT_TEXTREL in a PIE collect2: error: ld returned 1 exit status make[3]: *** [firmware/test/application/CMakeFiles/application_test.dir/build.make:369: firmware/test/application/application_test] Error 1 make[2]: *** [CMakeFiles/Makefile2:2029: firmware/test/application/CMakeFiles/application_test.dir/all] Error 2 make[1]: *** [CMakeFiles/Makefile2:2010: firmware/test/CMakeFiles/build_tests.dir/rule] Error 2 make: *** [Makefile:953: build_tests] Error 2
マイクロSD カードは、最初 KIOXIA の 64GB SDXC を試したもののやはり容量がだめ。次に試したのが Panasonic の 32GB SDHC で、容量は大丈夫のはずなのに TEST でコンペアエラーになった。最後に KIOXIA の 16GB SDHC を買ってきたところ、これは TEST も正常終了して問題無く使えているよう。
(2024/May/16) クロスコンパイラはこちらが良いかもしれない。
https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2019q4/gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2?revision=108bd959-44bd-4619-9c19-26187abf5225&rev=108bd95944bd46199c1926187abf5225&hash=E367D388F6429B67D5D6BECF691B9521