ラベル Petalinux の投稿を表示しています。 すべての投稿を表示
ラベル Petalinux の投稿を表示しています。 すべての投稿を表示

2020年11月20日金曜日

ultra96v2のwifiを2020.1で動かしてみた

ultra96v2のwifiを2020.1で動かした話。 パッチはここにおいておく。

事象

私の環境で、2020.1にアップデートしたデータを起動するとwifiのアクセスポイントが見えなくなる事象が確認された

原因

ultra96-ap-setupによって作成されるアクセスポイントは wpa_supplicantにwpa_ap_actual.confを渡して設定している模様。 私の環境ではwpa_ap_actual.confが空となっていた。

ap.shを順に動かしてみるとどうもsedでwpa_ap_actual.confを作成するところがコケているようなので、パッチを当てる。

対策

自分で使う分にはap.shを直接修正してもいいが、 レシピのファイルに対してパッチを当てるにはquiltというものを使うらしいので使ってみた。 使い方はここにある。 目的のソースの探し方なども書いてあるので読んでおくのがおすすめ。 インストールして使うみたい。

apt install quilt
cd <path-to-src>
quilt new fix-for-my-hw.patch
quilt add ap.sh
#fix ap.sh
quilt refresh

するとpatchesフォルダ配下にfix-for-my-hw.patchが得られるのでこれを自分のレシピへと取り込む。

更に、meta-avnetを見るとconnman使っているようなので、imageに追加した。 connmanのblacklistにp2p0を登録する設定ファイルを追加した。 加えて、shutdown時にAPの設定をoffにできるようにmeta-avnetからultra96-wpaを借りてきた。

また、起動時からネットワークを有効とするためにconnmanの設定を行った。 /var/lib/connman/settingsがあらかじめ存在していればそれに従った動作をするようなので、 ultra96-ap-setup.bbappendでsettingsを追加する。

動作

Ultra96V2-********ctxというAPが見えるのでこれに接続し、192.168.2.1にrootアクセスする。

ssh 192.168.2.1 -l root
#ultra96v2のrootに接続

2020年11月16日月曜日

yocto+petalinux2020.1でカーネルデバッグしてみようとした話

yoctoでカーネルデバッグをしてみようとした話。

エミュレータでは正常起動しているのに、実機だとブートの途中でハングするという問題を調査した際の手順をまとめた。 ビルドし始めてすぐにaxi_intcのdevicetreeが間違っていそうだなと気がついたけど、せっかくなので最後までやってみた。

結果、kgdbwaitはpetalinuxだと期待通りの動きをしないことがわかった。ドライバの修正方法について記載あったりするので、折を見てkgdbが起動時に使えるようにしておきたいところ。

環境

petalinux 2020.1
Ubuntu 18.04
https://github.com/akira-nishiyama/petalinux-ros2-manifests.git

エラー時のメッセージ

...(略)...
[    0.000000] GIC: Adjusting CPU interface base to 0x00000000f902f000
[    0.000000] GIC: Using split EOI/Deactivate mode
[    0.000000] irq-xilinx: /amba_pl@0/interrupt-controller@a0090000: num_irq=32, sw_irq=0, edge=0x0
実機の場合にここで止まる。

準備

cd ~/work
source setupsdk
MACHINE=ultra96v2 bitbake linux-xlnx -c do_menuconfig

以下の通り設定する。

Kernel hacking -> KGDB: Kernel debugger (Check it and Enter):
Check: KGDB: use kgdb over the serial console
Check: KGDB_KDB: include kdb frontend for kgdb        
Enable: Kernel debugging and Magic SysRq key
Enable: Compile the kernel with debug info

local.confに以下を設定する。 DEBUG_BUILD以降は必要かどうかはよくわからなかった。 RM_WORK_EXCLUDE += "linux-xlnx-dev"だけでも良いかも。

########################
# For debug
########################
EXTRA_IMAGE_FEATURES += "\
      tools-debug \    
      debug-tweaks \   
      "        

# Specifies to build packages with debugging information
DEBUG_BUILD = "1"

# Do not remove debug symbols
INHIBIT_PACKAGE_STRIP = "1"

# OPTIONAL: Do not split debug symbols in a separate file
INHIBIT_PACKAGE_DEBUG_SPLIT= "1"

ビルド

MACHINE=ultra96v2-zynqmp bitbake petalinux-image-minimal
MACHINE=ultra96v2-zynqmp bitbake petalinux-image-minimal -c do_populate_sdk

実行

u-bootのautobootを途中で止めてブートオプションを設定する。

setenv bootargs "kgdboc=ttyPS0,115200 kgdbwait"
boot

通常通り起動してしまった。 ここに情報があり、どうもpetalinux(というかxilinx_uartps.c?)の問題のよう。 とりあえずはLinuxが立ち上がった後は使用可能な模様。

root@ultra96v2-zynqmp:~# echo ttyPS0 > /sys/module/kgdboc/parameters/kgdboc
[   48.462920] KGDB: Registered I/O driver kgdboc
[   48.491488] KGDB: Waiting for connection from remote gdb...

Entering kdb (current=0xffffff805b8c1140, pid 390) on processor 2 due to Keyboard Entry
[2]kdb>

devicetreeを修正したら最初に調べようと思っていた問題は解決した。むしろ今まで何故動いていたのかが謎。

参考ページ

https://developer.ridgerun.com/wiki/index.php?title=Preparing_Yocto_Development_Environment_for_Debugging https://sites.google.com/site/kandamotohiro/linux/kgdb https://docs.windriver.com/bundle/Wind_River_Linux_Tutorial_Kernel_Debugging_with_GDB_and_KGDB_LTS_18_1/page/mmo1403548696698.html https://forums.xilinx.com/t5/Embedded-Linux/quot-KGDBWait-quot-parameter-is-not-waiting-while-booting-the/td-p/550816