---
# System prepended metadata

title: raspi5 + Kneron KL520 KL720 config issue
tags: [Kneron, edge, raspberry pi]

---

# raspi5 + Kneron KL520 KL720 config issue
update self ref: (更新正確的資訊)
https://hackmd.io/llrJpGEHSA-lFsulhCaYQQ

## raspberry pi5 install pios bookworm
![image](https://hackmd.io/_uploads/ry1Hs0rQA.png)

## lsusb (kl520,kl720)
已經根據上面參考連結內容，在windows裡面更新韌體，然後裝到raspberry pi5中lsusb顯示正確的型號與數量(kl520,kl720)
```
richard@raspberrypi5:~ $ lsusb
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 002: ID 32e4:0234 Global Shutter Camera Global Shutter Camera
Bus 003 Device 003: ID 3231:0720 Kneron Kneron KL720
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 3231:0100 Kneron Kneron KL520
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
richard@raspberrypi5:~ $ 
```

## 建立python環境
```
python -m venv ~/kneron/env
cd ~/kneron
richard@raspberrypi5:~/kneron $ pwd
/home/richard/kneron
richard@raspberrypi5:~/kneron $ ls
env
richard@raspberrypi5:~/kneron $ source env/bin/activate
(env) richard@raspberrypi5:~/kneron $ python --version
Python 3.11.2

(env) richard@raspberrypi5:~/kneron $ pip install kneron_plus/python/package/ubuntu/KneronPLUS-2.3.0-py3-none-any.whl

Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Processing ./kneron_plus/python/package/ubuntu/KneronPLUS-2.3.0-py3-none-any.whl
Collecting numpy
  Downloading numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (14.2 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.2/14.2 MB 10.3 MB/s eta 0:00:00
Installing collected packages: numpy, KneronPLUS
Successfully installed KneronPLUS-2.3.0 numpy-1.26.4

(結果報錯)
OSError: /home/richard/kneron/env/lib/python3.11/site-packages/kp/KPBaseClass/../../kp/lib/libusb-1.0.so.0: cannot open shared object file: No such file or directory

pip install kneron_plus/python/package/raspbianpi4/KneronPLUS-2.3.0-py3-none-any.whl

(結果報錯)
OSError: /home/richard/kneron/env/lib/python3.11/site-packages/kp/KPBaseClass/../../kp/lib/libusb-1.0.so.0: wrong ELF class: ELFCLASS32

```
![image](https://hackmd.io/_uploads/BybbppBXA.png)

## 選擇安裝 ubuntu/KneronPLUS-2.3.0-py3-none-any.whl並繼續
```
(env) richard@raspberrypi5:~/kneron $ pip install kneron_plus/python/package/ubuntu/KneronPLUS-2.3.0-py3-none-any.whl

# pip install libusb # (這沒用)


```
https://doc.kneron.com/docs/#plus_c/introduction/install_dependency/
![image](https://hackmd.io/_uploads/S1ExWCS7C.png)

![image](https://hackmd.io/_uploads/Byg7bRSmR.png)
```
$ sudo apt install cmake
$ sudo apt install libusb-1.0-0-dev
$ sudo apt install build-essential

cd /home/richard/kneron/kneron_plus
sudo bash install_libusb.sh

```
Note: [Ubuntu][Raspberry Pi] Please update Kneron device USB permission before following steps on Ubuntu. [See the Installation for details.](https://doc.kneron.com/docs/#plus_python/introduction/install_dependency/)

![image](https://hackmd.io/_uploads/B1cJQ0SXR.png)

## 嘗試用C語言build (結果成功)
![image](https://hackmd.io/_uploads/r1icrRBmC.png)

![image](https://hackmd.io/_uploads/HJecaAHQR.png)

https://doc.kneron.com/docs/#plus_c/getting_started/
```
richard@raspberrypi5:~ $ pwd
/home/richard
richard@raspberrypi5:~ $ cd kneron_plus/
richard@raspberrypi5:~/kneron_plus $ ls
app_lib  CMakeLists.txt  examples_legacy     ex_common             include            python     res  thirdparty  touch
build    examples        examples_model_zoo  firmware_development  install_libusb.sh  README.md  src  tools       VERSION
richard@raspberrypi5:~/kneron_plus $ cd build
richard@raspberrypi5:~/kneron_plus/build $ make -j4

...
```
build後的結果
```
richard@raspberrypi5:~/kneron_plus/build $ cd bin
richard@raspberrypi5:~/kneron_plus/build/bin $ ls
connect_devices                                            kl720_demo_customize_inf_multiple_models
DFUT_console                                               kl720_demo_customize_inf_single_model
generic_command                                            kl720_demo_generic_data_inference
kl520_demo_customize_inf_multiple_models                   kl720_demo_generic_image_inference
kl520_demo_customize_inf_single_model                      kl720_demo_generic_image_inference_crop
kl520_demo_customize_inf_single_model_debug                kl720_demo_generic_image_inference_fifoq_config
kl520_demo_customize_inf_single_model_profile              kl720_demo_generic_image_inference_flash_model
kl520_demo_generic_data_inference                          kl720_demo_generic_image_inference_multithread
kl520_demo_generic_image_inference                         kl720_demo_generic_image_inference_post_yolo
kl520_demo_generic_image_inference_crop                    kl720_demo_generic_inference
kl520_demo_generic_image_inference_fifoq_config            kl720_demo_generic_inference_bypass_pre_proc
kl520_demo_generic_image_inference_flash_model             kl720_demo_generic_inference_crop
kl520_demo_generic_image_inference_multithread             kl720_demo_generic_inference_flash_model
kl520_demo_generic_image_inference_post_yolo               kl720_demo_generic_inference_multithread
kl520_demo_generic_inference                               kl720_demo_generic_inference_post_yolo
kl520_demo_generic_inference_bypass_pre_proc               kl720_demo_user_define_api
kl520_demo_generic_inference_crop                          kl720_kn-model-zoo_generic_image_inference_classification
kl520_demo_generic_inference_flash_model                   kl720_kn-model-zoo_generic_image_inference_post_fcos
kl520_demo_generic_inference_multithread                   kl720_kn-model-zoo_generic_image_inference_post_yolov5
kl520_demo_generic_inference_post_yolo                     kl730_demo_customize_inf_multiple_models
kl520_demo_user_define_api                                 kl730_demo_customize_inf_single_model
kl520_kn-model-zoo_generic_image_inference_classification  kl730_demo_generic_data_inference
kl520_kn-model-zoo_generic_image_inference_post_fcos       kl730_demo_generic_image_inference
kl520_kn-model-zoo_generic_image_inference_post_yolov5     kl730_demo_generic_image_inference_crop
kl630_demo_customize_inf_multiple_models                   kl730_demo_generic_image_inference_fifoq_config
kl630_demo_customize_inf_single_model                      kl730_demo_generic_image_inference_flash_model
kl630_demo_generic_data_inference                          kl730_demo_generic_image_inference_multithread
kl630_demo_generic_image_inference                         kl730_demo_generic_image_inference_post_yolo
kl630_demo_generic_image_inference_crop                    kl730_demo_user_define_api
kl630_demo_generic_image_inference_fifoq_config            libkapp_yolo.so
kl630_demo_generic_image_inference_flash_model             libkplus.so
kl630_demo_generic_image_inference_multithread             library
kl630_demo_generic_image_inference_post_yolo               scan_devices
kl630_demo_user_define_api
richard@raspberrypi5:~/kneron_plus/build/bin $ ./scan_devices 

scanning kneron devices ...
number of Kneron devices found: 2

listing devices infomation as follows:

[0] scan_index: '0'
[0] port ID: '7'
[0] product_id: '0x720' (KL720)
[0] USB link speed: 'High-Speed'
[0] USB port path: '3-1'
[0] kn_number: '0xB9061A4C' 
[0] Connectable: 'True'
[0] Firmware: 'KDP2 Comp/F'

[1] scan_index: '1'
[1] port ID: '5'
[1] product_id: '0x100' (KL520)
[1] USB link speed: 'High-Speed'
[1] USB port path: '1-1'
[1] kn_number: '0xC8062934' 
[1] Connectable: 'True'
[1] Firmware: 'KDP2 Loader'
richard@raspberrypi5:~/kneron_plus/build/bin $ 

```
### kl520
```
richard@raspberrypi5:~/kneron_plus/build/bin $ ./kl520_kn-model-zoo_generic_image_inference_post_yolov5 -h
connect device ... OK
upload firmware ... OK
upload model ... OK
read image ... OK

starting inference loop 1 times:
.

inference loop is done

detectable class count : 80
box count : 19
Box 0 (x1, y1, x2, y2, score, class) = 372.0, 351.0, 508.0, 750.0, 0.813594, 0
Box 1 (x1, y1, x2, y2, score, class) = 744.0, 67.0, 796.0, 200.0, 0.545809, 0
Box 2 (x1, y1, x2, y2, score, class) = 86.0, 32.0, 134.0, 77.0, 0.286376, 0
Box 3 (x1, y1, x2, y2, score, class) = 375.0, 520.0, 479.0, 767.0, 0.522091, 1
Box 4 (x1, y1, x2, y2, score, class) = 457.0, 149.0, 721.0, 345.0, 0.787428, 2
Box 5 (x1, y1, x2, y2, score, class) = 137.0, 160.0, 476.0, 436.0, 0.784818, 2
Box 6 (x1, y1, x2, y2, score, class) = 706.0, 188.0, 796.0, 492.0, 0.732149, 2
Box 7 (x1, y1, x2, y2, score, class) = 84.0, 118.0, 301.0, 314.0, 0.727577, 2
Box 8 (x1, y1, x2, y2, score, class) = 172.0, 3.0, 318.0, 95.0, 0.708510, 2
Box 9 (x1, y1, x2, y2, score, class) = 427.0, 113.0, 624.0, 238.0, 0.677018, 2
Box 10 (x1, y1, x2, y2, score, class) = 237.0, 44.0, 401.0, 162.0, 0.637863, 2
Box 11 (x1, y1, x2, y2, score, class) = 32.0, 80.0, 177.0, 276.0, 0.604174, 2
Box 12 (x1, y1, x2, y2, score, class) = 0.0, 52.0, 35.0, 156.0, 0.522445, 2
Box 13 (x1, y1, x2, y2, score, class) = 23.0, 79.0, 131.0, 212.0, 0.265722, 2
Box 14 (x1, y1, x2, y2, score, class) = 326.0, 7.0, 454.0, 140.0, 0.223205, 2
Box 15 (x1, y1, x2, y2, score, class) = 320.0, 3.0, 449.0, 142.0, 0.304492, 7
Box 16 (x1, y1, x2, y2, score, class) = 240.0, 43.0, 400.0, 162.0, 0.227759, 7
Box 17 (x1, y1, x2, y2, score, class) = 166.0, 0.0, 320.0, 99.0, 0.212633, 7
Box 18 (x1, y1, x2, y2, score, class) = 0.0, 636.0, 61.0, 686.0, 0.351036, 8

output bounding boxes on 'output_one_bike_many_cars_800x800.bmp'

```
![image](https://hackmd.io/_uploads/Hk_-qRSQA.png)

### kl720
```
richard@raspberrypi5:~/kneron_plus/build/bin $ ./kl720_kn-model-zoo_generic_image_inference_post_yolov5
[warning] device is not run at super speed.
connect device ... OK
upload model ... OK
read image ... OK

starting inference loop 1 times:
.

inference loop is done

detectable class count : 80
box count : 18
Box 0 (x1, y1, x2, y2, score, class) = 371.0, 354.0, 510.0, 747.0, 0.805185, 0
Box 1 (x1, y1, x2, y2, score, class) = 742.0, 60.0, 794.0, 211.0, 0.515536, 0
Box 2 (x1, y1, x2, y2, score, class) = 87.0, 31.0, 135.0, 76.0, 0.265722, 0
Box 3 (x1, y1, x2, y2, score, class) = 89.0, 189.0, 121.0, 300.0, 0.208385, 0
Box 4 (x1, y1, x2, y2, score, class) = 373.0, 516.0, 480.0, 763.0, 0.528667, 1
Box 5 (x1, y1, x2, y2, score, class) = 139.0, 146.0, 474.0, 449.0, 0.805632, 2
Box 6 (x1, y1, x2, y2, score, class) = 458.0, 149.0, 719.0, 346.0, 0.762070, 2
Box 7 (x1, y1, x2, y2, score, class) = 173.0, 2.0, 319.0, 94.0, 0.731227, 2
Box 8 (x1, y1, x2, y2, score, class) = 706.0, 186.0, 799.0, 489.0, 0.726494, 2
Box 9 (x1, y1, x2, y2, score, class) = 95.0, 117.0, 290.0, 315.0, 0.717568, 2
Box 10 (x1, y1, x2, y2, score, class) = 244.0, 44.0, 407.0, 163.0, 0.661910, 2
Box 11 (x1, y1, x2, y2, score, class) = 428.0, 115.0, 623.0, 233.0, 0.656740, 2
Box 12 (x1, y1, x2, y2, score, class) = 37.0, 79.0, 175.0, 277.0, 0.581318, 2
Box 13 (x1, y1, x2, y2, score, class) = 0.0, 53.0, 33.0, 156.0, 0.493920, 2
Box 14 (x1, y1, x2, y2, score, class) = 24.0, 79.0, 132.0, 212.0, 0.245957, 2
Box 15 (x1, y1, x2, y2, score, class) = 319.0, 0.0, 449.0, 152.0, 0.303165, 7
Box 16 (x1, y1, x2, y2, score, class) = 235.0, 43.0, 410.0, 161.0, 0.226067, 7
Box 17 (x1, y1, x2, y2, score, class) = 0.0, 636.0, 62.0, 686.0, 0.206850, 8

output bounding boxes on 'output_one_bike_many_cars_800x800.bmp'
```
![image](https://hackmd.io/_uploads/BJhY5RrQC.png)

## 使用 miniconda
```
richard@raspberrypi5:~ $ uname -a
Linux raspberrypi5 6.6.28+rpt-rpi-2712 #1 SMP PREEMPT Debian 1:6.6.28-1+rpt1 (2024-04-22) aarch64 GNU/Linux

cd ~/Downloads
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh

bash Miniconda3-latest-Linux-aarch64.sh
nano ~/.bashrc
(文件中添加)
export PATH="/home/richard/miniconda3/bin:$PATH"

source ~/.bashrc

richard@raspberrypi5:~/Downloads $ source ~/.bashrc
richard@raspberrypi5:~/Downloads $ conda
usage: conda [-h] [-v] [--no-plugins] [-V] COMMAND ...

conda is a tool for managing and deploying applications, environments and packages.

options:
  -h, --help          Show this help message and exit.
  -v, --verbose       Can be used multiple times. Once for detailed output,
                      twice for INFO logging, thrice for DEBUG logging, four
                      times for TRACE logging.
  --no-plugins        Disable all plugins that are not built into conda.
  -V, --version       Show the conda version number and exit.

```
## 建立python環境
```
conda create --name kneron_py39 python=3.9
conda init --all
conda activate kneron_py39 
pip install opencv-python


```

## kp/lib/libusb-1.0.so.0: cannot open shared issue
```
# 檢查 raspi version
richard@raspberrypi5:~ $ uname -a
Linux raspberrypi5 6.6.20+rpt-rpi-2712 #1 SMP PREEMPT Debian 1:6.6.20-1+rpt1 (2024-03-07) aarch64 GNU/Linux
# 下載 miniconda
https://docs.anaconda.com/free/miniconda/
sudo /bin/bash Miniconda3-latest-Linux-aarch64.sh
# 初始化 conda
./conda init
# 建立環境
conda create --name kneron python=3.9
# 先更新 pip
python -m pip install --upgrade pip 

(kneron) richard@raspberrypi5:~/kneron_plus/python/package/ubuntu $ pwd
/home/richard/kneron_plus/python/package/ubuntu
(kneron) richard@raspberrypi5:~/kneron_plus/python/package/ubuntu $ ls
KneronPLUS-2.3.0-py3-none-any.whl
(kneron) richard@raspberrypi5:~/kneron_plus/python/package/ubuntu $ pip install KneronPLUS-2.3.0-py3-none-any.whl 

Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Processing ./KneronPLUS-2.3.0-py3-none-any.whl
Collecting numpy (from KneronPLUS==2.3.0)
  Downloading numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.metadata (62 kB)
     ???????????????????????????????????????? 62.3/62.3 kB 853.8 kB/s eta 0:00:00
Downloading numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (14.2 MB)
   ???????????????????????????????????????? 14.2/14.2 MB 9.0 MB/s eta 0:00:00
Installing collected packages: numpy, KneronPLUS
Successfully installed KneronPLUS-2.3.0 numpy-1.26.4

```
![image](https://hackmd.io/_uploads/HyDNtFwQ0.png)

## install kp/lib/libusb-1.0.so.0
```
(kneron) richard@raspberrypi5:~/kneron_plus/python $ pwd
/home/richard/kneron_plus/python
(kneron) richard@raspberrypi5:~/kneron_plus/python $ ls
example  example_legacy  example_model_zoo  install_libusb.sh  package
(kneron) richard@raspberrypi5:~/kneron_plus/python $ sudo bash ./install_libusb.sh 
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following packages were automatically installed and are no longer required:
  libraspberrypi0 libwpe-1.0-1 libwpebackend-fdo-1.0-1
Use 'sudo apt autoremove' to remove them.
The following additional packages will be installed:
  libusb-1.0-doc
The following NEW packages will be installed:
  libusb-1.0-0-dev libusb-1.0-doc
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 276 kB of archives.
After this operation, 1,965 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://deb.debian.org/debian bookworm/main arm64 libusb-1.0-0-dev arm64 2:1.0.26-1 [83.0 kB]
Get:2 http://deb.debian.org/debian bookworm/main arm64 libusb-1.0-doc all 2:1.0.26-1 [193 kB]
Fetched 276 kB in 0s (845 kB/s)     
Selecting previously unselected package libusb-1.0-0-dev:arm64.
(Reading database ... 147649 files and directories currently installed.)
Preparing to unpack .../libusb-1.0-0-dev_2%3a1.0.26-1_arm64.deb ...
Unpacking libusb-1.0-0-dev:arm64 (2:1.0.26-1) ...
Selecting previously unselected package libusb-1.0-doc.
Preparing to unpack .../libusb-1.0-doc_2%3a1.0.26-1_all.deb ...
Unpacking libusb-1.0-doc (2:1.0.26-1) ...
Setting up libusb-1.0-doc (2:1.0.26-1) ...
Setting up libusb-1.0-0-dev:arm64 (2:1.0.26-1) ...

```
## issue
```
(kneron) richard@raspberrypi5:~/kneron_plus/python $ python
Python 3.9.19 (main, May  6 2024, 19:46:57) 
[GCC 11.2.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import kp
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/richard/.conda/envs/kneron/lib/python3.9/site-packages/kp/__init__.py", line 5, in <module>
    from .KP import *
  File "/home/richard/.conda/envs/kneron/lib/python3.9/site-packages/kp/KP.py", line 6, in <module>
    from .Legacy import V1 as v1
  File "/home/richard/.conda/envs/kneron/lib/python3.9/site-packages/kp/Legacy/V1/__init__.py", line 5, in <module>
    from .KP import *
  File "/home/richard/.conda/envs/kneron/lib/python3.9/site-packages/kp/Legacy/V1/KP.py", line 5, in <module>
    from .KPInference import KPInference as inference
  File "/home/richard/.conda/envs/kneron/lib/python3.9/site-packages/kp/Legacy/V1/KPInference.py", line 6, in <module>
    from .KPValue import \
  File "/home/richard/.conda/envs/kneron/lib/python3.9/site-packages/kp/Legacy/V1/KPValue.py", line 16, in <module>
    from ...KPValue import \
  File "/home/richard/.conda/envs/kneron/lib/python3.9/site-packages/kp/KPValue.py", line 6, in <module>
    from .KPWrapperUtils import KPWrapperUtils as wrapper_utils
  File "/home/richard/.conda/envs/kneron/lib/python3.9/site-packages/kp/KPWrapperUtils.py", line 10, in <module>
    class KPWrapperUtils:
  File "/home/richard/.conda/envs/kneron/lib/python3.9/site-packages/kp/KPWrapperUtils.py", line 11, in KPWrapperUtils
    __KP_WRAPPER = KPWrapper()
  File "/home/richard/.conda/envs/kneron/lib/python3.9/site-packages/kp/KPBaseClass/WrapperBase.py", line 16, in __call__
    instance = super(Singleton, cls).__call__(*args, **kwargs)
  File "/home/richard/.conda/envs/kneron/lib/python3.9/site-packages/kp/KPWrapper.py", line 34, in __init__
    super(KPWrapper, self).__init__(lib_loader=KPLibLoader())
  File "/home/richard/.conda/envs/kneron/lib/python3.9/site-packages/kp/KPBaseClass/WrapperBase.py", line 25, in __init__
    self._load_libKP()
  File "/home/richard/.conda/envs/kneron/lib/python3.9/site-packages/kp/KPBaseClass/WrapperBase.py", line 33, in _load_libKP
    ctypes.CDLL(share_lib, mode=ctypes.RTLD_GLOBAL)
  File "/home/richard/.conda/envs/kneron/lib/python3.9/ctypes/__init__.py", line 382, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: /home/richard/.conda/envs/kneron/lib/python3.9/site-packages/kp/KPBaseClass/../../kp/lib/libusb-1.0.so.0: cannot open shared object file: No such file or directory
>>> exit()

```
## python 3.10
```
(kneron_py310) richard@raspberrypi5:~/kneron_plus/python $ pwd
/home/richard/kneron_plus/python
(kneron_py310) richard@raspberrypi5:~/kneron_plus/python $ ls -l
total 20
drwxrwxr-x 3 richard richard 4096 May  7 11:29 example
drwxrwxr-x 2 richard richard 4096 May  7 11:29 example_legacy
drwxrwxr-x 2 richard richard 4096 May  7 11:29 example_model_zoo
-rw-rw-r-- 1 richard richard 1859 May  7 11:29 install_libusb.sh
drwxrwxr-x 6 richard richard 4096 May  7 11:29 package
(kneron_py310) richard@raspberrypi5:~/kneron_plus/python $ sudo bash ./install_libusb.sh 
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
libusb-1.0-0-dev is already the newest version (2:1.0.26-1).
The following packages were automatically installed and are no longer required:
  libraspberrypi0 libwpe-1.0-1 libwpebackend-fdo-1.0-1
Use 'sudo apt autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

```
![image](https://hackmd.io/_uploads/r1CviYPQA.png)

## 原廠資訊
https://www.kneron.com/forum/discussion/445/raspberry-pi5-kneron-plus-2-3-0-python-issue
```
是的，raspberry pi的套件支持pi 4 32-bit。我和同事確認過了，只能請您用C去做開發，不好意思!
```














## 舊的資訊
根據古早教材(y2020)中說明下載host_lib__v0.8，但是官網已經停更，並說明改用PLUS
![image](https://hackmd.io/_uploads/Hy1L6NjMA.png)
### Kneron Plus
![image](https://hackmd.io/_uploads/BJ43TVof0.png)

```
sudo apt install cmake
sudo apt install libusb-1.0-0-dev
sudo apt install build-essential

sudo bash install_libusb.sh

vi /etc/udev/rules.d/10-local.rules

ERNEL=="ttyUSB*",ATTRS{idVendor}=="067b",ATTRS{idProduct}=="2303",MODE="0777",SYMLINK+="kneron_uart"
KERNEL=="ttyUSB*",ATTRS{idVendor}=="1a86",ATTRS{idProduct}=="7523",MODE="0777",SYMLINK+="kneron_pwr"
SUBSYSTEM=="usb",ATTRS{product}=="Kneron KL520",ATTRS{idVendor}=="3231",ATTRS{idProduct}=="0100",MODE="0666"
SUBSYSTEM=="usb",ATTRS{product}=="Kneron KL720l",ATTRS{idVendor}=="3231",ATTRS{idProduct}=="0200",MODE="0666"
SUBSYSTEM=="usb",ATTRS{product}=="Kneron KL720",ATTRS{idVendor}=="3231",ATTRS{idProduct}=="0720",MODE="0666"
SUBSYSTEM=="usb",ATTRS{product}=="Kneron KL630",ATTRS{idVendor}=="3231",ATTRS{idProduct}=="0630",MODE="0666"
SUBSYSTEM=="usb",ATTRS{product}=="Kneron KL730",ATTRS{idVendor}=="3231",ATTRS{idProduct}=="0732",MODE="0666"


```
![image](https://hackmd.io/_uploads/SkBaZBizA.png)

Build Code
```
$ cd kneron_plus/
$ mkdir build
$ cd build
$ cmake ..
$ make -j
```

```
richard@raspberrypi5:~/kneron_plus/build $ cmake ..
-- The C compiler identification is GNU 12.2.0
-- The CXX compiler identification is GNU 12.2.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- CMAKE_CROSSCOMPILE OFF
-- USB_LIB: []
-- PACK_PYTHON 
-- Build for UNIX environment
-- Configuring done
-- Generating done
-- Build files have been written to: /home/richard/kneron_plus/build
richard@raspberrypi5:~/kneron_plus/build $ ls
app_lib  bin  CMakeCache.txt  CMakeFiles  cmake_install.cmake  examples  examples_legacy  examples_model_zoo  Makefile  src  tools
richard@raspberrypi5:~/kneron_plus/build $ ls -l
total 108
drwxr-xr-x  4 richard richard  4096 May 10 14:48 app_lib
drwxr-xr-x  3 richard richard  4096 May 10 14:48 bin
-rw-r--r--  1 richard richard 14212 May 10 14:48 CMakeCache.txt
drwxr-xr-x  5 richard richard  4096 May 10 14:48 CMakeFiles
-rw-r--r--  1 richard richard  2175 May 10 14:48 cmake_install.cmake
drwxr-xr-x 53 richard richard  4096 May 10 14:48 examples
drwxr-xr-x 17 richard richard  4096 May 10 14:48 examples_legacy
drwxr-xr-x  9 richard richard  4096 May 10 14:48 examples_model_zoo
-rw-r--r--  1 richard richard 56766 May 10 14:48 Makefile
drwxr-xr-x  3 richard richard  4096 May 10 14:48 src
drwxr-xr-x  4 richard richard  4096 May 10 14:48 tools
richard@raspberrypi5:~/kneron_plus/build $ 

```

```
richard@raspberrypi5:~/kneron_plus/build/bin $ sudo ./scan_devices

scanning kneron devices ...
number of Kneron devices found: 1

listing devices infomation as follows:

[0] scan_index: '0'
[0] port ID: '7'
[0] product_id: '0x100' (KL520)
[0] USB link speed: 'High-Speed'
[0] USB port path: '3-1'
[0] kn_number: '0x       0' (invalid)
[0] Connectable: 'True'
[0] Firmware: 'KDP'
richard@raspberrypi5:~/kneron_plus/build/bin $ 

```
其中 [0] kn_number: '0x       0' (invalid) 
那個是Key, 綁定AI model 用，需用DFUT 工具更新
(在 windows 做比較容易)

```
richard@raspberrypi5:~/kneron_plus $ cd build/
richard@raspberrypi5:~/kneron_plus/build $ sudo ./bin/scan_devices

scanning kneron devices ...
number of Kneron devices found: 1

listing devices infomation as follows:

[0] scan_index: '0'
[0] port ID: '7'
[0] product_id: '0x100' (KL520)
[0] USB link speed: 'High-Speed'
[0] USB port path: '3-1'
[0] kn_number: '0xC8062934' 
[0] Connectable: 'True'
[0] Firmware: 'KDP2 Loader'
richard@raspberrypi5:~/kneron_plus/build $ 

```
### Kneron_DFUT
結果還是要安裝Kneron_DFUT_ubuntu_2.3.0因為要指定port id
雖然是raspi 但是要用Kneron_DFUT_ubuntu
https://doc.kneron.com/docs/#plus_c/introduction/upgrade_ai_device_to_kdp2/#2-download-kneron-dfut



