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ジャンパはオープンで使用する。

f:id:mffukui:20180803160840j:plain

 

接続

TI_JTAG_14コネクタで冶具と接続する。

f:id:mffukui:20180803161043j:plain

Linuxカーネルデバッグ その3(冶具の作成)

エミュレータとBeagleBoneBlackを接続するために、冶具を作成する。

接続のイメージは以下のとおり。

f:id:mffukui:20180802214541j:plain

 

部品

 

接続

ボックスヘッダのピン配置は以下のようになっている。

ボックスヘッダとピンソケットを1対1で接続すればOK。

なお、BeagleBoneBlac側の6番は未接続なので、接続しない。

 

f:id:mffukui:20180802220932j:plain

また、ピンソケットは2列のものがなかったので、1x10のものを2つ購入して並べて使用した。

 

 作成した冶具のイメージを載せる。

 

f:id:mffukui:20180802222315j:plain

 

f:id:mffukui:20180802222329j:plain

 

BeagleBoneBlackと接続すると以下のようになる。

f:id:mffukui:20180802225149j:plain

 

Linuxカーネルデバッグ その2(BeagleBoneBlackの改造)

BeagleBoneBlackはJTAG用のコネクタとしてP2が用意されている。

しかし、デフォルトのままではランドしかないため、ピンヘッダをはんだ付けする。

 

 

部品

ピンヘッダ 2×10(20P) 表面実装用 1.27mmピッチ: パーツ一般 秋月電子通商-電子部品・ネット通販

 

はんだ付け

はんだ付けをすると以下のようになる。

コネクタP2のピン配置は、外側が1,2ピンになっている。

f:id:mffukui:20180802212851j:plain

ピッチが狭いので、直接はんだ付けするのは難しい。

 先にピンヘッダの方をはんだでコーティングしておくとよいらしい。

以下のビデオが参考になる。

Tutorial - Install JTAG Connector on BeagleBone Black - YouTube

 

※足について

作業する際、基盤に足があると便利なので、以下を購入。

プラスチックナット+連結(6角ジョイント)スペーサー(10mm)セット: 電子工作便利商品 秋月電子通商-電子部品・ネット通販

 2個つなげるとこんな感じ。

f:id:mffukui:20180802215622j:plain

 

Linuxカーネルデバッグ その1(概要)

BeagleBoneBlackの魅力として、JTAG用のコネクタが実装されていることがあげられる。これを使ってLinuxカーネルデバッグを行う。

 

PCとの接続は以下のとおり。

f:id:mffukui:20180802114444j:plain

 

エミュレータは簡単に手に入って安いTMS320-XDS100-V3を使用する。

(マルツで1万円程度で購入可能 https://www.marutsu.co.jp/pc/i/27247491/)

BeagleBoneBlackのJTAGコネクタのピッチは1.27mmなので直接エミュレータに接続できない。そのため、冶具を使って接続する。

 

BeagleBoneBlackで動作させるターゲットOSはdebian,

ホストPC上で使用するデバッグ環境はTIのCodeComposerStudio v8.1.0(CCS)。

 

 

 

 

 

USBスピーカー

BeagleBoneBlackでネットラジオを聞くために、USBスピーカーを購入。

買ったのはこれ。

 

www.sanwa.co.jp

音量調節があって、便利。

 

設定は特にしなくても音がでた(はず)

再生にはmplayerが便利。

mpalyer XXX.mp3

とりあえずはこれで再生する。

 

BeagleBone用ケース

秋月で売っていたので、買ってみる。

BeagleBoneBlack用ケース: マイコン関連 秋月電子通商 電子部品 ネット通販

 

全体はこんな感じ。

f:id:mffukui:20180609002012j:plain

ネジレスではめ込む。カバーは一度つけると少しはずしにくい。

はずすコツは、カバーの側面を抑えること。

 

裏側はネジなどに掛けられるようになっている。

 

f:id:mffukui:20180609002246j:plain

 

USB側。

f:id:mffukui:20180609002347j:plain

 

電源側。

f:id:mffukui:20180609002439j:plain

 

カバーはちょっと高さがあるので、低いケープならばつけたままカバーを閉められると思われる。

 

 

ubuntuカーネルのリビルド

カーネルのリビルドをしてみる。手順は、

https://elinux.org/BeagleBoardUbuntu

を参考にする。

 

1.適当にディレクトリ作成

mkdir bbb

 

2. cloneする

git clone https://github.com/RobertCNelson/ti-linux-kernel-dev.git

 

3. buildする

cd ti-linux-kernel-dev/
git checkout origin/ti-linux-4.14.y -b tmp
./build_kernel.sh 

ツールのダウンロード後、KERNELディレクトリにソースがクローンされてビルドが始まる。
途中でmenuconfigの画面になるが、Esc Escで終了する。

Script Complete
eewiki.net: [user@localhost:~$ export kernel_version=4.14.37-ti-r46]

みたいなメッセージが出てきて完了する。deployフォルダにイメージができている。

4.14.37-ti-r46-dtbs.tar.gz
4.14.37-ti-r46-modules.tar.gz
4.14.37-ti-r46.zImage
config-4.14.37-ti-r46
disk

 

4.インストールする

シェルスクリプトを実行する。

sudo ./tools/install_kernel.sh

初回時は、「system.shの設定がねーよ」、といってエラーになる。

-----------------------------
lsblk:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 1 14.9G 0 disk
└─sdb1 8:17 1 14.9G 0 part /media/ubuntu/rootfs
sda 8:0 0 931.5G 0 disk
├─sda2 8:2 0 1K 0 part
├─sda5 8:5 0 2G 0 part [SWAP]
└─sda1 8:1 0 929.6G 0 part /
-----------------------------
ERROR: MMC is not defined in system.sh 

system.shの設定をPCに合わせて修正する。変更したのは、

CORES=4
  ↓
CORES=2

MMC=/dev/sde
  ↓
MMC=/dev/sdb

 

一応、全部貼り付けておく。

 

 

#!/bin/sh
#copy as "system.sh" and tweak for your system

ARCH=$(uname -m)

#ARM Native gcc compiler (running gcc on arm target)
if [ "x${ARCH}" = "xarmv7l" ] ; then
#Native arm gcc compiler
CC=
fi

###REQUIRED:

#ARM GCC CROSS Compiler:
#if CC is not set, a known working linaro based gcc compiler will be downloaded and utilized.
#CC=<enter full path>/bin/arm-none-eabi-
#CC=<enter full path>/bin/arm-linux-gnueabi-
#CC=<enter full path>/bin/arm-linux-gnueabihf-

###OPTIONAL:

###OPTIONAL: CORES: number of CPU cores to use for compilation
#CORES=4
CORES=2

###OPTIONAL: LINUX_GIT: specify location of locally cloned git tree.
#
#LINUX_GIT=/home/user/linux-stable/

###OPTIONAL: MMC: (REQUIRED FOR RUNNING: tools/install_kernel.sh)
#Note: This operates on raw disks, NOT PARTITIONS..
#
#WRONG: MMC=/dev/mmcblk0p1
#CORRECT: MMC=/dev/mmcblk0
#
#WRONG: MMC=/dev/sde1
#CORRECT: MMC=/dev/sde
#
#MMC=/dev/sde
MMC=/dev/sdb

###ADVANCED: RUN_BISECT: used with ./scripts/bisect.sh
#
#RUN_BISECT=1

###ADVANCED: AUTO_BUILD: Easier integration with Jenkins/Buildbot/etc..
#
#AUTO_BUILD=1

 

 

system.shを設定後、改めてシェルスクリプトを実行する。

sudo ./tools/install_kernel.sh 

 ごにょごにょされる。

I see...
fdisk -l:
Disk /dev/ram0: 64 MiB, 67108864 bytes, 131072 sectors
Disk /dev/ram1: 64 MiB, 67108864 bytes, 131072 sectors
Disk /dev/ram2: 64 MiB, 67108864 bytes, 131072 sectors
Disk /dev/ram3: 64 MiB, 67108864 bytes, 131072 sectors
Disk /dev/ram4: 64 MiB, 67108864 bytes, 131072 sectors
Disk /dev/ram5: 64 MiB, 67108864 bytes, 131072 sectors
Disk /dev/ram6: 64 MiB, 67108864 bytes, 131072 sectors
Disk /dev/ram7: 64 MiB, 67108864 bytes, 131072 sectors
Disk /dev/ram8: 64 MiB, 67108864 bytes, 131072 sectors
Disk /dev/ram9: 64 MiB, 67108864 bytes, 131072 sectors
Disk /dev/ram10: 64 MiB, 67108864 bytes, 131072 sectors
Disk /dev/ram11: 64 MiB, 67108864 bytes, 131072 sectors
Disk /dev/ram12: 64 MiB, 67108864 bytes, 131072 sectors
Disk /dev/ram13: 64 MiB, 67108864 bytes, 131072 sectors
Disk /dev/ram14: 64 MiB, 67108864 bytes, 131072 sectors
Disk /dev/ram15: 64 MiB, 67108864 bytes, 131072 sectors
Disk /dev/sda: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Disk /dev/sdb: 14.9 GiB, 15980298240 bytes, 31211520 sectors

lsblk:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 1 14.9G 0 disk
└─sdb1 8:17 1 14.9G 0 part /media/ubuntu/rootfs
sda 8:0 0 931.5G 0 disk
├─sda2 8:2 0 1K 0 part
├─sda5 8:5 0 2G 0 part [SWAP]
└─sda1 8:1 0 929.6G 0 part /
-----------------------------
Are you 100% sure, on selecting [/dev/sdb] (y/n)? y

Debug: Existing Partition on drive:
-----------------------------
Disk /dev/sdb: 14.9 GiB, 15980298240 bytes, 31211520 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
Disklabel type: dos
Disk identifier: 0xb73b7f50

Device Boot Start End Sectors Size Id Type
/dev/sdb1 * 8192 31211519 31203328 14.9G 83 Linux

Unmounting Partitions
-----------------------------
Starting Partition Search
-----------------------------
Trying: [/dev/sdb1]
Partition: [/dev/sdb1] trying: [vfat], [ext4], [btrfs]
Partition: [extX]
found: /boot/uEnv.txt
info: 4.14.24-ti-r37 was installed
Installing 4.14.37-ti-r46 to /dev/sdb1
'/home/ubuntu/bbb/ti-linux-kernel-dev/deploy/4.14.37-ti-r46.zImage' -> '/home/ubuntu/bbb/ti-linux-kernel-dev/deploy/disk/boot/vmlinuz-4.14.37-ti-r46'
Installing 4.14.37-ti-r46-dtbs.tar.gz to /dev/sdb1
info: /boot/uEnv.txt: uname_r=4.14.37-ti-r46
found: /etc/fstab
Installing 4.14.37-ti-r46-modules.tar.gz to /dev/sdb1
'/home/ubuntu/bbb/ti-linux-kernel-dev/deploy/config-4.14.37-ti-r46' -> '/home/ubuntu/bbb/ti-linux-kernel-dev/deploy/disk/boot/config-4.14.37-ti-r46'
info: [4.14.37-ti-r46] now installed...
/home/ubuntu/bbb/ti-linux-kernel-dev
-----------------------------
This script has finished...
For verification, always test this media with your end device...

SDカードのカーネルイメージが更新される。SDブートして、unameでタイムスタンプが更新されていればOK。