ドミノ
1月はいろいろあって、更新できなかったら、催促メールも来なくなってしまった・・・。
そういえば、子供のころドミノで遊んだ記憶がない。
100均にありそうでなかったので、ヨドバシで購入。
表面はスポーツ?の絵が薄く書かれていて、ひらがなはシールを貼る必要がある。
作りがチープでダメ、という意見もあるけど、ドミノ倒しと積み木的な使い方をするのには十分。
ペンホルダー
最近、方眼ノートを使い始めた。手帳はペンホルダーがあるが、ノートはなくて不便なので、自分で作る。
参考にしたのはこのページ。
用意するものは、
・いらないクリアフォルダ
・超強力両面テープ
・製本テープ
みんな100均で入手可能。
クリアフォルダに製本テープを張って切り取り、丸めたものをノートに両面テープで張る。参考サイトでは下敷きを使ってたけど、面倒なので最後のページに直接張る。
こんな感じになる。
いい感じ。
Linuxカーネルデバッグ その8(ソースデバッグ)
CCSでLinuxのソースデバッグを行う。ここでは、例としてファイル書き込み時に関数がブレークすることを確認する。
手順
1. XDSv100、BeagleBoneBlack、ホストPCを接続する。
2. ターミナルからscreenコマンドで接続した状態でBeagleBoneBlackの電源を投入する。U-Bootが起動するので、何かキーを押して、コマンド入力待ち状態にする。
3. CCSを起動する。workspaceは以前使用したものを選ぶ。ここではデフォルトの「workspace_v8」を選択する。
4. 「Target Configurations」ウィンドウからUser Defined内のBeagleBoneBlack.ccxmlを右クリックし、「Launch Selected Configuration」を選ぶ。
5.画面がDebug画面に切り替わる。この状態ではまだ接続していない。
6.「Texas Instruments XDS 100v3 USB Debug Probe_0/CortxA8」を選択し、右クリックで「Connect Target」を選ぶ。
→GELが実行され、CortexA8がSuspended状態になる。
7.実行ボタン(緑の矢印)を押下すると、CPUが走りだし、Linuxが起動する。
linux起動後、ログインしておく。
8. シンボルファイルのロードを行う。CCSのメニューで「Run」→「Load」→「Load Symbols」を選択し、vmlinuxファイルを指定する。指定するファイルはkernel_src/kernel/kernel/vmlinux。
9. CCSのメニューから「File」→「Open File」を選択し、ブレークを貼るファイルを開く。ここでは、kernel_src/kernel/kernel/fs/ext4/file.cを開く。
10. ブレークする関数を探し、ブレークポイントを貼る。右クリックし、「Breakpoint」→「Hardware Breakpoint」を選択する。
→ブレークポイントが張られる。
11.echoコマンドでファイルを書き込むと、その行でブレークする。
以上で、カーネルのソースデバッグが確認できた。Happy Hacking!!!
Linuxカーネルデバッグ その7(SDカード作成)
SDブート用のSD用カードを作成する。SDカードのベースは、BeagleBoneBlackの公式サイトのlatest-image(https://beagleboard.org/latest-images)で配布されているeMMC flasherを用いる。ただし、このイメージは2Gbyteにパーティションが切られているので、通常用途では使いづらい。そのため、イメージの内容を一度HDDへコピーして、パーティションを切り直して使用する。
eMMC Flasherイメージの作成
公式サイトからイメージファイルをダウンロードする。2018/08/10時点での最新ファイルはBBB-eMMC-flasher-debian-7.5-2014-05-14-2gb.img.xzだった。
ダウンロード後、SDカードへ書き込む。ここで、/dev/sdbがSDカードである。
xzcat BBB-eMMC-flasher-debian-7.5-2014-05-14-2gb.img.xz | sudo dd of=/dev/sdb
このままでは、SDカードを刺した時点でeMMCの更新スクリプトが走ってしまう*1ので、無効化する。SDカード内のFATパーティションの/boot/uboot/flash-eMMC.txtをリネームする。
cd /media/ubuntu/BEAGLE_BONE/
HDDへの一時退避
作成したSDカードの内容をHDDへ一時退避する。適当なディレクトリを作成し、そこへコピーする。
mkdir sdcard
cd sdcard
mkdir BOOT
mkdir rootfs
cd BOOT
sudo rsync -avxHAX /media/ubuntu/BEAGLE_BONE/ .
cd ..
cd rootfs
パーティション分割&フォーマット&ファイルのコピー
あらためてSDカードのパーティションを分割する。16GbyteのSDカードをfdiskで以下のように分割した。
/dev/sdb1 256MB BOOT
/dev/sdb2 14.6G rootfs
それぞれ、フォーマットする。
sudo mkfs.vfat /dev/sdb1 -n BOOT
sudo mkfs.ext4 -L rootfs /dev/sdb2
HDDへ一時退避していたファイルをSDカードへコピーする。BOOTパーティションについては、必要なもののみコピーする。
cd sdcard/BOOT
sudo cp MLO /media/ubuntu/BOOT/
sudo cp -r dtbs/ /media/ubuntu/BOOT/
sudo cp SOC.sh /media/ubuntu/BOOT/
sudo cp initrd.img /media/ubuntu/BOOT/
sudo cp u-boot.img /media/ubuntu/BOOT/
sudo cp uEnv.txt /media/ubuntu/BOOT/
sudo cp zImage /media/ubuntu/BOOT/cd ../rootfs
カーネルの更新
事前にビルドしていたカーネルイメージをコピーする。
cd kernel_src/kernel/kernel/arch/arm/boot
sudo cp zImage /media/ubuntu/BOOT/
sudo cp dts/am335x-boneblack.dtb /media/ubuntu/BOOT/dtbs/
cd kernel_src/kernel/kernel
sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/media/ubuntu/rootfs modules_install
作成したSDカードでブートし、uname -aでビルド時間が更新されていることを確認する。
今回作成したバージョンは3.8.13-00770-ged37066だった。
initrd.imgの更新
以降の作業は新たに作成したSDカードでブートしたdebian上で行う。
cd /boot/uboot
sudo update-initramfs -c -k 3.8.13-00770-ged37066
sudo mv initrd.img initrd.img.old
sudo mv ../initrd.img-3.8.13-00770-ged37066 initrd.img
再起動し、起動時に、
modprobe: chdir(3.8.13-00770-ged37066): No such file or directory
modprobe: chdir(3.8.13-00770-ged37066): No such file or directory
modprobe: chdir(3.8.13-00770-ged37066): No such file or directory
のメッセージが表示されないことを確認する。
参考URL
BeagleBone Blackのkernelの再構築を試みる – JUNK-BOX
Linuxカーネルデバッグ その6(カーネルビルド)
ターゲットとなるLinuxカーネルをビルドする。ビルドはホストPC上でクロスコンパイルをする。いろいろな方がやっている一般的な方法で行う。
ツールのインストール
いくつかツールをインストールする。
・Git
インストールされていない場合はインストールする。cloneするために、ユーザー名とメールアドレスを設定しておく。
sudo apt-get install git
git config --global user.email "XXXX@xxxx.co.jp"
git config --global user.name "xxxx"
・lzop
圧縮に使うらしいのでインストールする。
sudo apt-get install lzop
・U-boot
mkimageを使うためにビルドする。
mkdir u-boot
cd u-boot
wget ftp://ftp.denx.de/pub/u-boot/u-boot-latest.tar.bz2
tar xf u-boot-latest.tar.bz2
cd u-boot-2017.09
make sandbox_defconfig tools-only
sudo install tools/mkimage /usr/local/bin
・GCC
使用したカーネルは、GCC4系を想定しているようなので、gcc-4.9のARMコンパイラをインストールする。なぜか、シンボリックリンクが張られなかったので、張っておく。
sudo apt-get install gcc-4.9-arm-linux-gnueabi
cd /usr/bin/
sudo ln -s arm-linux-gnueabi-gcc-4.9 arm-linux-gnueabi-gcc
インストール後にバージョンを見ると、以下のようになる。
arm-linux-gnueabi-gcc -v
Using built-in specs.
COLLECT_GCC=arm-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc-cross/arm-linux-gnueabi/4.9/lto-wrapper
Target: arm-linux-gnueabi
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.9.3-13ubuntu2' --with-bugurl=file:///usr/share/doc/gcc-4.9/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.9 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/arm-linux-gnueabi/include/c++/4.9.3 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libitm --disable-libquadmath --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.9-armel-cross/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.9-armel-cross --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.9-armel-cross --with-arch-directory=arm --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libgcj --enable-objc-gc --enable-multiarch --enable-multilib --disable-sjlj-exceptions --with-arch=armv5t --with-float=soft --disable-werror --enable-multilib --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=arm-linux-gnueabi --program-prefix=arm-linux-gnueabi- --includedir=/usr/arm-linux-gnueabi/include
Thread model: posix
gcc version 4.9.3 (Ubuntu/Linaro 4.9.3-13ubuntu2)
カーネルソース取得&ビルド
gitでソースをcloneして、パッチを適用する。
mkdir kernel_src
cd kernel_src
git clone git://github.com/beagleboard/kernel.git
cd kernel
git checkout 3.13
./patch.sh
コンフィグファイルを書き換える。
cp configs/beaglebone kernel/arch/arm/configs/beaglebone_defconfig
wget http://arago-project.org/git/projects/?p=am33x-cm3.git\;a=blob_plain\;f=bin/am335x-pm-firmware.bin\;hb=HEAD -O kernel/firmware/am335x-pm-firmware.bin
カーネルのビルドは、通常のカーネルビルドと同じだが、prefixを常につけて行う。
cd kernel
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- beaglebone_defconfig -j2
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- uImage dtbs LOADADDR=0x80008000 -j2
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- modules -j2
ビルドが完了すると、kernel_src/kernel/kernel/arch/arm/bootにzImageが作成される。
参考URL:
Building BBB Kernel - eLinux.org
Linuxカーネルデバッグ その5(CodeComposerStudio)
CodeComposerStudio v8.1.0(CCS)のインストールと設定を行う。
ホストOSはUbuntu 16.04.4。
インストール
CCSのインストーラをTIのダウンロードページ
(Download CCS - Texas Instruments Wiki)
からダウンロードする。ここではLinux用のOff-line Installersを使用する。
ダウンロードしたインストーラを適当なフォルダで解凍する。
tar xf CCS8.1.0.00011_linux-x64.tar.gz
解凍されたフォルダへ移動して、インストーラを起動する。
cd CCS8.1.0.00011_linux-x64/
sudo ./ccs_setup_linux64_8.1.0.00011.bin
インストーラが起動し、以下の警告がでる。
Please unplug the USB cables for all LaunchPads and Debug Probes prior to continuing. This is required to ensure driver installation completes.
デバッガなどを抜いた状態で「Continue」を押下する。
ライセンスが表示されるので、
I accept the terms of the license agreement
を選択し、「next」を押下する。
インストール先を指定する。
ここではデフォルトの/opt/tiのまま「next」を押下する。
すでに存在する場合は警告がでるが、「yes」を押下する。
インストールするパッケージを選択する画面になるが、選べない(?)ので「Next」を押下する。
未サポートのデバイスについての情報が表示される。「Next」を押下する。
デバッガ選択画面になるが、選べない(?)ので「Finish」を押下する。
インストールが開始される。
インストール完了画面が表示されたら「Finish」を押下する。
引き続き、ドライバのインストールを行う。
cd /opt/ti/ccsv8/install_scripts
sudo ./install_drivers.sh
念の為、再起動する。
設定
「 コンピュータを検索」からCCSを起動する。
workspaceの保存位置を聞かれる。ここではデフォルトのまま起動する。
「Getting Started」の画面が出たら、「×」で閉じる。
メニューの「View」から「Target Connection」ウィンドウを選び表示する。
User Definedを右クリックして、New Target Configurationを選ぶと、ファイル名を聞かれるので、ここではBeagleBoneBlack.ccxmlとしておき、「Finish」を押下する。
セットアップ画面になるので、ConnectionにXDS 100v3, BoardにBeagleBone_Blackを選択し、「Save」ボタンを押下する。
Advancedタブを選び、図のように設定する。
接続テスト
BeagleBoneBlackとXDS100を治具で接続し、XDS100をホストPCと接続する。
BeagleBoneBlackの電源を投入後、「Test Connection」ボタンを押下すると、接続テストが実行される。最後に「The JTAG DR Integrity scan-test has succeeded.」が表示されればOK。
一応、全文を載せておく。
[Start: Texas Instruments XDS100v3 USB Debug Probe_0]
Execute the command:
%ccs_base%/common/uscif/dbgjtag -f %boarddatafile% -rv -o -F inform,logfile=yes -S pathlength -S integrity
[Result]
-----[Print the board config pathname(s)]------------------------------------/home/ubuntu/.ti/ti/0/0/BrdDat/testBoard.dat
-----[Print the reset-command software log-file]-----------------------------
This utility has selected a 100- or 510-class product.
This utility will load the adapter 'libjioserdesusbv3.so'.
The library build date was 'May 30 2018'.
The library build time was '22:46:22'.
The library package version is '8.0.27.9'.
The library component version is '35.35.0.0'.
The controller does not use a programmable FPGA.
The controller has a version number of '4' (0x00000004).
The controller has an insertion length of '0' (0x00000000).
This utility will attempt to reset the controller.
This utility has successfully reset the controller.-----[Print the reset-command hardware log-file]-----------------------------
The scan-path will be reset by toggling the JTAG TRST signal.
The controller is the FTDI FT2232 with USB interface.
The link from controller to target is direct (without cable).
The software is configured for FTDI FT2232 features.
The controller cannot monitor the value on the EMU[0] pin.
The controller cannot monitor the value on the EMU[1] pin.
The controller cannot control the timing on output pins.
The controller cannot control the timing on input pins.
The scan-path link-delay has been set to exactly '0' (0x0000).-----[The log-file for the JTAG TCLK output generated from the PLL]----------
Test Size Coord MHz Flag Result Description
~~~~ ~~~~ ~~~~~~~ ~~~~~~~~ ~~~~ ~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~
1 64 - 01 00 500.0kHz O good value measure path length
2 64 + 04 38 30.00MHz [O] good value apply explicit tclkThere is no hardware for measuring the JTAG TCLK frequency.
In the scan-path tests:
The test length was 2048 bits.
The JTAG IR length was 6 bits.
The JTAG DR length was 1 bits.The IR/DR scan-path tests used 2 frequencies.
The IR/DR scan-path tests used 500.0kHz as the initial frequency.
The IR/DR scan-path tests used 30.00MHz as the highest frequency.
The IR/DR scan-path tests used 30.00MHz as the final frequency.-----[Measure the source and frequency of the final JTAG TCLKR input]--------
There is no hardware for measuring the JTAG TCLK frequency.
-----[Perform the standard path-length test on the JTAG IR and DR]-----------
This path-length test uses blocks of 64 32-bit words.
The test for the JTAG IR instruction path-length succeeded.
The JTAG IR instruction path-length is 6 bits.The test for the JTAG DR bypass path-length succeeded.
The JTAG DR bypass path-length is 1 bits.-----[Perform the Integrity scan-test on the JTAG IR]------------------------
This test will use blocks of 64 32-bit words.
This test will be applied just once.Do a test using 0xFFFFFFFF.
Scan tests: 1, skipped: 0, failed: 0
Do a test using 0x00000000.
Scan tests: 2, skipped: 0, failed: 0
Do a test using 0xFE03E0E2.
Scan tests: 3, skipped: 0, failed: 0
Do a test using 0x01FC1F1D.
Scan tests: 4, skipped: 0, failed: 0
Do a test using 0x5533CCAA.
Scan tests: 5, skipped: 0, failed: 0
Do a test using 0xAACC3355.
Scan tests: 6, skipped: 0, failed: 0
All of the values were scanned correctly.The JTAG IR Integrity scan-test has succeeded.
-----[Perform the Integrity scan-test on the JTAG DR]------------------------
This test will use blocks of 64 32-bit words.
This test will be applied just once.Do a test using 0xFFFFFFFF.
Scan tests: 1, skipped: 0, failed: 0
Do a test using 0x00000000.
Scan tests: 2, skipped: 0, failed: 0
Do a test using 0xFE03E0E2.
Scan tests: 3, skipped: 0, failed: 0
Do a test using 0x01FC1F1D.
Scan tests: 4, skipped: 0, failed: 0
Do a test using 0x5533CCAA.
Scan tests: 5, skipped: 0, failed: 0
Do a test using 0xAACC3355.
Scan tests: 6, skipped: 0, failed: 0
All of the values were scanned correctly.The JTAG DR Integrity scan-test has succeeded.
[End: Texas Instruments XDS100v3 USB Debug Probe_0]
Linuxカーネルデバッグ その4(XDS-100v3)
BeagleBoneBlackとエミュレータを接続する。
購入品
開発ボード、キット、プログラマ TMS320-XDS100-V3の通販ならマルツオンライン
ホストPCとの接続にUSBミニのケーブルが必要だが、同梱されていないので、別途用意する。
また、マニュアルもないので、公式HP(https://www.olimex.com/Products/DSP/Emulators/TMS320-XDS100-V3/)からダウンロードする。
設定
BeagleBoneBlackとの接続はTI_JTAG_14コネクタの方を使用するので、 ARM_JTAG_Eジャンパはオープンで使用する。
接続
TI_JTAG_14コネクタで冶具と接続する。