qshinoの日記

Powershell関係と徒然なこと

linux shell sourceと . の違い

source . とは

linux shell コマンドの . は、カレントシェルでファイルを実行し、環境変数等の設定に使われる。

sourceコマンドも同じ機能だが、bash, zsh, tcsh 等で実装された。

debian/ashではsourceは実装されていない。

但し、centos の shはbashにリンクされており、sourceが使える。

対応一覧

sh  . source
old sh ash dash o x
bash zsh tcsh o o

. の方が汎用的であり、スクリプトでは . , コマンドラインでは打ち間違い対策でsourceとするなどがよいかも知れない。

使い分け

ローカルに使用する場合や、bssh等をsourceを実装したshellを指定してスクリプトを作成する場合は、sourceを使っても問題ないが、sh 指定して作成したスクリプトを展開する場合は、. を使う。

Jetson xavier gpio

xavier gpio

f:id:qshino:20190706120432j:plain

functions

Function #pins Note
I2C 4(2x2) scl,sda x 2set
SPI 5 sck, miso,mosi,cs0/1
I2S 5 din/dout,fs,sck,mclk
CAN 4 in,out x2
UART 4 rts, cts, rx,tx
PWM 3 pwm
DMIC 2 Clk, in
GPIO 1 40Header
GV 12 5Vx2, 3.3Vx2, GNDx8

Xavier nano 違い

Func Xavier Nano #pins xavier - nano
SPI 1 set 2 set -5
CAN 2 set / +4 none +4
PWM 3 1 +2
GPIO 1 2 -1
DMIC 1set None +2
LCD none 1 -1
Cam none 1 -1

ref

xavier can

https://medium.com/@ramin.nabati/enabling-can-on-nvidia-jetson-xavier-developer-kit-aaaa3c4d99c9

raspi gpio

https://tool-lab.com/2013/12/raspi-gpio-controlling-breadboard-2/

raspi gpio pin assign

https://raspberry-pi.ksyic.com/bypass/files/GPIO.svgz#Alt0

nano i2c

http://www.neko.ne.jp/~freewing/raspberry_pi/nvidia_jetson_nano_gpio_i2c/

nano led

http://www.neko.ne.jp/~freewing/raspberry_pi/nvidia_jetson_nano_gpio_blink_led_switch/

Jetson nano dtb self update

DTB self update

Jetson Nano 自身でdtbを更新。

基本フロー

母艦から、

  1. dts変更 arch/arm64/boot/dts/
  2. make dtbs ; make dtbs_install
  3. create-jetson-nano-sd-card-image.sh
  4. nanoに移動し、sudo dd if=bootloader/signed/$dtb.encrypt of=/dev/mmcblk0p10

.flash.shを使わない簡素書込み方法。

dts 関連ファイル

  • sources-pkgのkernel_src.rbz2
  • nano dts : tegra210-p3448-0000-p3449-0000-a02.dts

想定ツリー

Top
+-- Linux_for_Tegra: l4t dir
    +-- rootfs : rootfs
    +-- kernel/dtb : dtb
    +-- bootloader/  : *.dtb.encrypted
    +-- jetson-nano-qspi-sd.conf
+-- kernel         : kernel src
    +-- kernel4.9/arch/arm64/boot/dts
    +-- nvidia/drivers/
+— hardware   : kernel src
    +-- nvidia
      +-- platform/t210/porg/kernel-dts/ : dtsi
      +-- soc/ : dtsi
+-- download      : tarball dir
+-- public_sources : srcpkg

手順

  1. ソースのboot/dts dirのdts編集
  2. kernel-4.9 dirにて make dtbs ; make INSTALL_PATH=Linux_for_Tegra/kernel dtbs_install
  3. l4t dirから ./create-jetson-nano-sd-card-image.sh -o sd.img -s 6G -r 200
  4. nanoから、 sudo dd if=bootloader/signed/$dtb.encrypt of=/dev/mmcblk0p10
#
# 下記リンクからダウンロード
#
devlink=開発パッケージリンク
rootlink=サンプルルートリンク
srclink= https://developer.nvidia.com/embedded/dlc/l4t-sources-32-1-jetson-nano
# 
# DLしたパッケージ名
#
ksrc=kernel_src.tbz2
devpkg=l4t-r32-1.tbz2
rootpkg=rootfs.tbz2
srcpkg=l4t-sources-32-1-0.tbz3
#
# dirs
#
dl=download
lt=Linux_for_Tegra
ps=public_sources
rt=rootfs
kk=kernel/kernel-4.9
#
# file
#
dtb=tegra210-p3448-0000-p3449-0000-a02.dtb
#
top=~

cd $top

if false ; then
    wget $devlink -O $dl/$devpkg
    wget $rootlink -O $dl/$rootpkg
    wget $srclink -O $dl/$srcpkg
fi
if false ; then
    tar jxvf $dl/$devpkg
    tar jxvf $dl/$rootpkg -C $lt
    tar jxvf $dl/$srcpkg
    tar jxvf $ps/$ksrc
fi

# build kernel

cd $kk

make -j2 Image ; make -j2 modules ; make dtbs

# update dtb

cp arch/arm64/boot/dts/$dtb $top/$lt/kernel/dtb/ 

# create sd image

cd $top/$lt

sudo ./create-jetson-nano-sd-card-image.sh -o sd-blob.img -s 6G -r 200

# write dtb

sudo dd if=bootloader/signed/$dtb.encrypt of=/dev/mmcblk0p10

Nano SD.card Partitions

Number Start (sector) End (sector) Size Code Name
1 24576 62521310 29.8 GiB 8300 APP
2 2048 2303 128.0 KiB 8300 TBC
3 4096 4991 448.0 KiB 8300 RP1
4 6144 7295 576.0 KiB 8300 EBT
5 8192 8319 64.0 KiB 8300 WB0
6 10240 10623 192.0 KiB 8300 BPF
7 12288 13439 576.0 KiB 8300 TOS
8 14336 14463 64.0 KiB 8300 EKS
9 16384 17663 640.0 KiB 8300 LNX
10 18432 19327 448.0 KiB 8300 DTB
11 20480 20735 128.0 KiB 8300 RP4
12 22528 22687 80.0 KiB 8300 BMP

ref

https://developer.ridgerun.com/wiki/index.php?title=NVIDIA_Jetson_Nano-Building_the_Kernel_from_Source

https://manual.atmark-techno.com/armadillo-eva-1500/armadillo-eva-1500_product_manual_ja-1.0.0/ch09.html

ソース

pcie-tegra.c

tegra_pcie_restore_device()

ここで待ち合わせる。

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/drivers/pci/host/pci-tegra.c?h=v4.9.184

static const struct dev_pm_ops tegra_pcie_pm_ops= {
.resume = tegra_pcie_resume,
.suspend_late = tegra_pcie_suspend_late,
.resume_early = tegra_pcie_resume_early,
.runtime_suspend = tegra_pcie_save_device,
.runtime_resume = tegra_pcie_restore_device,
.suspend_noirq = tegra_pcie_save_device,
.resume_noirq = tegra_pcie_restore_device,
};
#endif /* CONFIG_PM */

/* driver data is accessed after init, so use __refdata instead of __initdata */
static struct platform_driver __refdata tegra_pcie_driver = {
.probe = tegra_pcie_probe,
.remove = tegra_pcie_remove,
.driver = {
.name = "tegra-pcie",
.owner = THIS_MODULE,
#ifdef CONFIG_PM
.pm = &tegra_pcie_pm_ops,
#endif
.of_match_table = tegra_pcie_of_match,
},
};

static int __init tegra_pcie_init_driver(void)
{
return platform_driver_register(&tegra_pcie_driver);
}

static void __exit tegra_pcie_exit_driver(void)
{
platform_driver_unregister(&tegra_pcie_driver);
}

module_init(tegra_pcie_init_driver);
module_exit(tegra_pcie_exit_driver);
MODULE_LICENSE("GPL v2");

pcie-tegra.c

```

static const struct dev_pm_ops tegra_pcie_pm_ops = {
.resume = tegra_pcie_resume,
.suspend_late = tegra_pcie_suspend_late,
.resume_early = tegra_pcie_resume_early,
.runtime_suspend = tegra_pcie_save_device,
.runtime_resume = tegra_pcie_restore_device,
.suspend_noirq = tegra_pcie_save_device,
.resume_noirq = tegra_pcie_restore_device,
};
#endif /* CONFIG_PM */

/* driver data is accessed after init, so use __refdata instead of __initdata */
static struct platform_driver __refdata tegra_pcie_driver = {
.probe = tegra_pcie_probe,
.remove = tegra_pcie_remove,
.driver = {
.name = "tegra-pcie",
.owner = THIS_MODULE,
#ifdef CONFIG_PM
.pm = &tegra_pcie_pm_ops,
#endif
.of_match_table = tegra_pcie_of_match,
},
};

static int __init tegra_pcie_init_driver(void)
{
return platform_driver_register(&tegra_pcie_driver);
}

static void __exit tegra_pcie_exit_driver(void)
{
platform_driver_unregister(&tegra_pcie_driver);
}

module_init(tegra_pcie_init_driver);
module_exit(tegra_pcie_exit_driver);
MODULE_LICENSE("GPL v2");

```

 

ロボットアーム

ロボットアーム

nano にロボットアームと・カメラを繋げて、カメラを自由に動かしたい。

電動で動く雲台でも良いが、探してもnanoに繋げられそうなものがなく、ロボットに行き着いた。

良いのがあれば紹介して欲しい。

ref

https://jp.sainsmart.com/products/6-axis-desktop-robotic-arm-assembled?variant=13568954335290¤cy=JPY&utm_campaign=gs-2019-02-25&utm_source=google&utm_medium=smart_campaign&gclid=CjwKCAjwmNzoBRBOEiwAr2V27dodrdSHoWFeezH2xQppusXigLfbXQ05CAKBHsjplaWUjNmfy3enURoC5vcQAvD_BwE