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
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を更新。
基本フロー
母艦から、
- dts変更 arch/arm64/boot/dts/
- make dtbs ; make dtbs_install
- create-jetson-nano-sd-card-image.sh
- 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
手順
- ソースのboot/dts dirのdts編集
- kernel-4.9 dirにて make dtbs ; make INSTALL_PATH=Linux_for_Tegra/kernel dtbs_install
- l4t dirから ./create-jetson-nano-sd-card-image.sh -o sd.img -s 6G -r 200
- 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
壊れたbzip2を復旧
For 18.04: sudo apt install bzip2=1.0.6-8.1 libbz2-1.0=1.0.6-8.1
For 16.04: sudo apt install bzip2=1.0.6-8 libbz2-1.0=1.0.6-8
以後のupdateを抑制
sudo apt-mark hold bzip2 libbz2-1.0
更新抑制解除
sudo apt-mark unhold bzip2 libbz2-1.0
ref
ソース
pcie-tegra.c
tegra_pcie_restore_device()
ここで待ち合わせる。
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に繋げられそうなものがなく、ロボットに行き着いた。
良いのがあれば紹介して欲しい。