Linux
ubuntu 네트워크 장치 이름 변경
네트워크 인터페이스명 가지고 프로젝트를 진행하던 중 우분투를 깔면서 이더넷 인터페이스가 바뀌게 되면서 프로그램을 우분투 버전마다 프로그램을 만들어야 되는 상황이 생겼다. 그래서 네트워크 인터페이스를 고정할 수 있는 방법에 대해서 알아 봤다. 1. 네트워크 인터페이스 MAC 주소 확인 ifconfig 2. 70-persistent-net.rules 생성 sudo gedit /etc/udev/rules.d/70-persistent-net.rules SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="MAC 주소", NAME="인터페이스 명" NAME 부분에 다른 명칭도 사용 가능 테스트는 enp0s3으로 진행한다. 3. grub 수정 sudo g..
PCIe ASPM Error
PCie 장치를 Host PC 에 장착 후 부팅 하였을 때 아래와 같은 에러 메시지가 출력되는 에러가 발생한다. 해당 에러 메시지는 PC 메인보드에서 PCIe 슬롯에 장착된 디바이스들의 전원을 컨트롤 하는 ASPM 기능에 대한 에러 메시지로 PC 와 장치의 기능 관련으로는 전혀 문제가 없다. ASPM이란? 활성 상태 전원 관리(ASPM, Active-State Power Management)는 PCIe 서브시스템의 전원 소비를 PCIe 연결로 접속된 장치가 사용중이 아닐 때 저전력 상태로 변경해서 절약하는 전원 관리 메커니즘입니다. ASPM은 연결된 디바이스들의 전원 상태를 제어합니다. 해당 에러 메시지가 뜨는 것을 막기 위해서는 ASPM 기능을 끄는 것으로 방법은 아래와 같다. PC 를 실행 후 터미널..
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 (1by..
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 mappingMemory mapping 은 파일을 프로세스의 메모리에 매핑하는 것이다. 일반적으로 File에 접근할 때 File I/O system call을 사용하여 접근한다. 매핑을 사용하게 되면 File을 프로세스의 가상 메모리 공간으로 매핑하게 된다. 즉 File I/O system call을 사용하지 않고도 접근이 가능하다.mmap함수를 사용하면 파일을 프로세스의 가상 메모리에 매핑할 수 있다. 메모리에 매핑된 데이터는 파일 입출력 함수를 사용하지 않고 직접 읽고 쓸 수 있다.mmap#includevoid* 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/ 아래에 존재하는 파일들이 바로 디바이스 드라이버 ..