Linux

    리눅스 커널 소스의 구조

    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..

    open(), close()

    https://rorsi.tistory.com/61 디바이스 드라이버 디바이스 드라이버(Device Driver) 일반적으로 디바이스란 컴퓨터에 물려있는 여러 주변장치들을 뜻한다. 네트워크 어댑터, 오디오, 키보드, 마우스 등이 디바이스에 해당하고, 이러한 디바이스들 rorsi.tistory.com 위 포스트에 이어서 디바이스 드라이버를 만들었다면 이제 그 드라이버를 이용해 open(), close()를 구현해 보고자 한다. driver.c #include #include #include #include #include #include #include #include #include #include #define DEVICE_NAME "driver" static dev_t device_dev; stati..

    ioctl()

    ioctl ioctl() 함수란 하드웨어의 제어와 상태 정보를 얻기 위해 제공되는 함수이다. read(), write()를 이용해서 데이터를 읽고 쓰는 등의 기능은 가능하지만 하드웨어를 제어하거나 상태 정보를 확인하려면 ioctl()를 이용해야 한다. long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); long (*compat_ioctl) (struct file *, unsigned int, unsigned long); 첫 번째 인자는 open 한 디바이스 드라이버의 fd 값이다 두 번째 인자는 디바이스에게 전달할 명령이다. 이 명령에 따라서 디바이스를 컨트롤할 수 있다. 에러시 -1을 반환, 다른 시스템 호출과 같이 성공하면 0보다..

    디바이스 드라이버

    디바이스 드라이버(Device Driver) 일반적으로 디바이스란 컴퓨터에 물려있는 여러 주변장치들을 뜻한다. 네트워크 어댑터, 오디오, 키보드, 마우스 등이 디바이스에 해당하고, 이러한 디바이스들을 컨트롤하기 위한 디바이스 드라이버가 존재한다. 응용프로그램이 하드웨어를 직접 컨트롤하는 것이 아니라 디바이스 드라이버를 통해서 하드웨어를 조종한다. 수많은 하드웨어 장치를 컨트롤하기 위해서는 그 규격에 맞춰서 개발을 해야 하는데 이는 매우 어렵고 비효율적인 일이다. 리눅스 시스템은 VFS(Virtual File System)기능을 지원하는데, 리눅스는 디바이스를 /dev 디렉토리에 하나의 파일로써 취급한다. 디바이스 드라이버 또한 파일로 관리된다. /dev/ 아래에 존재하는 파일들이 바로 디바이스 드라이버 ..

    CANdevStudio

    CANdevStudio는 CAN 네트워크를 구성하고 시뮬레이션 할 수 있는 오픈소스 크로스 플랫폼 CAN 시뮬레이션 소프트웨어다. CANdevStudio 를 사용하여 자동차의 점화 상태, 도어 상태 또는 후진 기어와 같은 CAN 신호를 시뮬레이션 할 수 있다. CAN 하드웨어 인터페이스(예: Microchip, Vector, PEAK-Systems)와 함께 작동하거나 심지어 Linux에서는 내장 에뮬레이션으로(vcan 및 cannelloni) 실제 CAN 하드웨어없이도 사용할 수 있다. SocketCAN 사용SocketCAN은 Linux용 CAN 프로토콜(Controller Area Network)의 구현이다. 다른 네트워크 장치와 유사한 방식으로 다른 CAN 버스 장치와 커뮤니케이션 할 수 있는 인터페..