전체 글

전체 글

    L4T(Linux for Tegra), JETSON

    L4T Tegra용 Linux(Linux4Tegra, L4T)는 Nvidia Jetson 보드 시리즈와 같은 플랫폼에서 사용되는 Tegra 프로세서 시리즈용 Nvidia의 Linux 기반 시스템 소프트웨어 배포판이다. 이 시스템 소프트웨어는 Nvidia의 소프트웨어 개발 키트(SDK)인 JetPack과 함께 제공된다. JETSON NVIDIA Jetson은 고성능, 저전력 컴퓨팅 모듈을 NVIDIA AI 소프트웨어 스택과 결합하는 임베디드 및 에지 장치용 플랫폼이다. 데이터 센터 및 클라우드 배포를 지원하는 것과 동일한 NVIDIA 기술로 AI 애플리케이션을 위한 엔드 투 엔드 가속을 제공하도록 설계되었다. Jetson 생산 모듈 및 개발자 키트 제품군에는 다음이 포함된다. Type of module M..

    JETSON backup 이미지 만들기

    L4T 도구를 사용하여 Ubuntu 파일 시스템이 포함된 Jetson 플랫폼 eMMC에서 APP 파티션을 백업 및 복원할 수 있다. 우선 HOST(Linux) PC와 JETSON 장치를 USB Type-B(PC측은 Type-A)로 연결한다. Jetson device 를 Recovery 모드로 연결 후 터미널에서 lsusb 명령어를 통해 확인한다. lsusb 시 Nvidia Corp 장치가 잡혀야 한다. (디바이스 ID는 장치마다 다르다.) 이미지 백업 HOST PC의 BSP 폴더로 이동합니다. 아래 명령은 플랫폼의 APP 파티션 이미지를 호스트의 지정된 파일에 저장합니다. $ sudo ./flash.sh -r -k APP -G backup.img mmcblk0p1 장치 종류 • For Jetson AGX..

    i2c-tools

    i2c-tools는 코드를 작성하지 않고도 I2C 주변 장치를 쉽게 디버깅할 수 있게 해주는 I2C 프로그램이다. i2cdetect 특정 I2C 버스에 어떤 주변 장치가 연결되어 있는지 확인할 수 있습니다. i2cdetect -l // i2c 연결된 모든 라인 확인 특정 I2C 버스에서 감지된 주변 장치 목록을 가져옵니다 i2cdetect -r -y 2ex) i2cdetect -r -y 2 // i2c 라인 2번에 연결된 모든 장치 주소 확인 i2cset ( 1byte & 2byte Adress ) 원하는 장치에 직접 쓰려면 i2cset를 사용한다. i2cset -f -y 2ex) i2cset -f -y 2 0x10 0x01 0x50 // i2c 라인 2번에 연결된 0x10 주소를 가진 장치의 0x01 ..

    Xavier NX driver build without flash

    드라이버 수정 작업을 거치고 나서 다시 이미지를 굽기 위해서는 시간이 많이 소모됩니다. 다음과 같은 방법을 이용하면 보다 빠르게 작업이 가능합니다. 센서 드라이버를 로드 가능한 모듈로 구성하려면 CONFIG_VIDEO카메라에 대한 설정을 변경 해줍니다. m = 외부 모듈로 등록 y = 내장 모듈로 등록 CONFIG_VIDEO =m 커널과 센서 드라이버를 다시 빌드합니다. Linux_for_Tegra/rootfs/lib/modules/4.9.140-tegra/kernel/driver/i2c/camera.ko 센서 드라이버가 다시 빌드 되면 다음 위치에서 찾을 수 있습니다. 커널 버전에 따라 위치는 달라집니다. 현 커널 버전은 4.9.140 새 센서 모듈을 로드하려면 센서 드라이버 파일.ko을 Jetson ..

    Xavier NX build dtb without flash

    [ Command ] DTB 폴더로 이동 cd /boot 2. DTB 파일을 DTS 파일로 변환 su dtc -I dtb -O dts tegra194-p3668-all-p3509-0000.dtb > /home/canlab/test.dts 3. DTS 파일 내 옵션 수정 gedit test.dts 4. 이전 DTB 파일 삭제 sudo rm -rf tegra194-p3668-all-p3509-0000.dtb 5. 수정한 DTS 파일을 DTB 파일로 변환 su dtc -I dts -O dtb /home/canlab/test.dts > tegra194-p3668-all-p3509-0000.dtb 6. boot 옵션 수정 cd /boot/extlinux sudo gedit extlinux.conf 설정 파일 안에..

    Build NVIDIA Jetson kernel

    https://rorsi.tistory.com/59 Jetpack BSP Download - emmc 본 문에서 진행하고 있는JETPACK 버전은 4.6.1 입니다. DevKit 버전이 아닌 캐리어 보드 기준입니다. A. Download & Set Jetpack BSP 아래 사이트에서 SDK manager 프로그램을 다운 받습니다. - 로그인 필수!! h rorsi.tistory.com B. Download cross compiler for Jetpack BSP Linux for Tegra(Linux4Tegra, L4T)는 Nvidia Jetson 보드 시리즈와 같은 플랫폼에서 사용되는 Tegra 프로세서 시리즈용 Nvidia의 Linux 기반 시스템 소프트웨어 배포판입니다. l4t..

    SSD 자동 인식

    리눅스에서 ssd에 파일을 저장하는 프로그램을 만들다가 자동으로 ssd를 인식하고 포맷 후 마운트 하는 작업이 필요하여 만들게 되었다. fdisk 를 이용해서 구성할려고 하였지만 사용중인 SSD가 4TB 이기 때문에 parted 프로그램을 사용하였다. *fdisk는 MBR 방식이기 때문에 디스크의 사이즈가 2TB가 넘어가면 용량을 2TB 까지 밖에 사용을 못합니다. 때문에 2TB 이상의 스토리지를 사용할 때는 MBR 방식 대신 GPT 방식을 사용해주어야 합니다. #!/bin/bash # Installed Parted Checking if which parted >/dev/null; then echo "parted cli already installed!!!" for i in a b do if [ -b /..

    리눅스 커널 소스의 구조

    arch arch 하부 디렉토리에는 아키텍처별로 동작하는 커널 코드가 있습니다. arm: 32비트 계열 ARM 아키텍처 코드가 있다. arm64: 64비트 계열 ARM 아키텍처 코드가 있습니다. x86: 폴더 이름과 같이 인텔 x86 아키텍처 코드가 있습니다. include include에는 커널 코드 빌드에 필요한 헤더 파일이 있습니다. Documentation 커널 기술 문서가 있는 폴더로, 커널 시스템에 대한 기본 동작을 설명하는 문서를 찾을 수 있습니다. 커널 개발자를 대상으로 작성된 문서이기에 커널에 대한 기본 지식이 없으면 이해하기가 조금 어렵습닏. kernel 커널의 핵심 코드가 있는 디렉토리로, 다음과 같은 하위 디렉토리를 확인할 수 있습니다. irq: 인터럽트 관련 코드 sched: 스케..

    Memory mapping

    Memory mapping Memory mapping 은 파일을 프로세스의 메모리에 매핑하는 것이다. 일반적으로 File에 접근할 때 File I/O system call을 사용하여 접근한다. 매핑을 사용하게 되면 File을 프로세스의 가상 메모리 공간으로 매핑하게 된다. 즉 File I/O system call을 사용하지 않고도 접근이 가능하다. mmap함수를 사용하면 파일을 프로세스의 가상 메모리에 매핑할 수 있다. 메모리에 매핑된 데이터는 파일 입출력 함수를 사용하지 않고 직접 읽고 쓸 수 있다. mmap #include void* mmap(void *addr, size_tlength, intprot, intflags, intfd, off_toffset); addr : 매핑할 메모리 주소 hint ..

    read(), write()

    https://rorsi.tistory.com/65 이전 open(), close()에 이어서 이번에는 read(), write()를 구현해 보고자 한다. driver.c #include #include #include #include #include #include #include #include #include #include #define DEVICE_NAME "driver" static dev_t device_dev; static struct class *device_class; static struct cdev device_cdev; static char *buffer = NULL; int device_open(struct inode *inode, struct file *filp); int de..