Unix & Linux/Kernel 19

이번엔 커널 모듈이다 ( Kernel Module)

https://tldp.org/LDP/lkmpg/2.6/html/c119.html 커널 모듈이란? 시스템 부팅 후 동적으로 로딩할 수 있는 커널 구성 요소 커널을 다시 컴파일 하거나 재부팅할 필요 없이 커널의 일부분을 교체하는 것이 가능 디바이스 드라이버 , 파일 시스템 , 네트워크 프로토콜 등이 모듈로 제공 그럼 일반 응용프로그램하고 뭐가 다른거니? 메인 함수가 없다 대신 커널에 로딩 및 제거 될 때 불러지는 함수가 존재하는데 아래와 같다. 로딩시 module_init() 언로딩시 module_exit() 리눅스 디바이스 드라이버의 특성 1) 커널 코드 디바이스 드라이버는 커널의 한부분이므로, 커널의 다른 코드와 마찬가지로 잘못되면 시스템에 치명적인 피해를 줄 수 있다. 2) 커널 인터페이스 디바이스 ..

Unix & Linux/Kernel 2022.02.14

Raspberry Pi Zero W, 커널 컴파일 및 빌드

1. Kernel ( 커널 ) ? 운영체제 (OS) 에서 가장 코어 파트에 해당 커널은 컴퓨터의 각종 드라이버, 메모리, 프로세스 등을 관리하는 역할을 수행 일반적으로 배포판으로 제공되는 커널은 이미 일반적인 기능이 포함 라즈베리파이는 Debian 기반의 os를 사용하는데 부품과 적절히 호환될 수 있는 형태로 제공된다. 기본적인 커널에서 제공하지 않는 기능을 사용하고 싶을 때, 커널을 변경하여 컴파일해볼 필요가 있다. 예를들어 특정한 하드웨어를 관리하기 위한 디바이스 드라이버 (Device Driver) 를 작성할 때 커널 모듈 형태로 작성할 수 있다. 1-1 커널의 주요 디렉토리 - linux/kernel : 커널 핵심 소스 코드 - linux/include : 커널 소스코드의 헤더 파일 - linux..

Unix & Linux/Kernel 2022.01.13

Device Tree (디바이스 트리) 에 대해

ARM 리눅스에서 x86 과 같은 bios 역할을 해주는 것이 device tree 1. 동작 : bootloader 는 kernel 을 시작 시키기전에 dtb 를 memory 영역으로 복사한 후 kernel 을 시작한다. 2. dts 표기법 dts = device tree specification (사람이 이해 할 수 있는 수준으로 기술) dtb = device tree blob (DT를 binary로 변환 한 것) dtc = device tree compiler 3. Device Tree Overlay DT 는 검색할 수 없는 하드웨어를 설명하는 이름이 지정된 노드와 속성의 데이터 구조입니다. Android에서 사용되는 Linux 커널과 같은 운영체제는 DT를 사용하여 Android 기반 기기에 사용..

Unix & Linux/Kernel 2021.09.04

리눅스 커널 소스 ( Linux Kernel Source )

참고 사이트 : http://wiki.kldp.org/Translations/html/The_Linux_Kernel-KLDP/ 1. Kernel : 리눅스 커널 동작을 제어하는 기본 기능 2. mm : 리눅스 커널의 메모리 관리 (물리메모리, 가상메모리) 3. fs : 가상 파일 시스템 , 서브 디렉토리 아래에 각종 파일 시스템이 존재 : vfat / ext2 같은 서브디렉토리가 있다. 4. net : 각종 네트워크 프로토콜에 관한 코드 5. ipc : System V IPC ( 공유메모리, 세마포어, 메시지) : IPC 란 : Inter-Process Communication, 프로세스 간 통신 6. init : 리눅스 커널을 부팅할 때 호출되는 각종 초기화 처리의 본체 : 커널이 어떻게 동작하는지 보..

Unix & Linux/Kernel 2021.07.21

라즈베리파이 크로스컴파일

참고사이트 : https://wikidocs.net/3243 1. 툴체인 설치 git clone https://github.com/raspberrypi/tools ~/tools 2. $ PATH 환경 변수를 업데이트 echo PATH=\$PATH:~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin >> ~/.bashrc source ~/.bashrc 3. 소스 받기 git clone --depth=1 https://github.com/raspberrypi/linux 4. 소스 빌드 sudo apt install git bc bison flex libssl-dev make 5. 소스 및 장치 트리 파일을 빌드하려면 다음 명령 cd lin..

Unix & Linux/Kernel 2021.07.19

Trouble Shooting, cc1: error: -Werror=date-time: no option -Wdate-time <debug>

리눅스 빌드를 하다보면 아래와 같은 에러를 만날 수 있다. cc1: error: -Werror=date-time: no option -Wdate-time scripts/Makefile.build:279: recipe for target 'scripts/mod/empty.o' failed make[1]: *** [scripts/mod/empty.o] Error 1 Makefile:1205: recipe for target 'prepare0' failed 솔루션은 바로 아래와 같다. sudo apt install gcc-arm-linux-gnueabihf gcc tool chain 을 4.9 ver 를 사용해야 한다. 그래서 위와 같이 하면 이제 에러가 없어진다.

Unix & Linux/Kernel 2021.06.15

라즈베리파이 리눅스 커널 , 빌드 따라하기

라즈베리파이 4 를 기준으로 작성되었으며 다른 버전은 다른 설정값을 가지고있습니다. 1-1. 리눅스 커널 Configuration ( 기본 빌드 옵션 ) KERNEL=kernel7l To configure the Linux kernel (starting from reasonable default settings for the Raspberry Pi) issue the commands: KERNEL=kernel7 (this is used by some build scripts) make bcm2711_defconfig 1-2. 커널 빌드 설정 리눅스 커널을 맞춤으로 구성할 수 있으므로, 고급 사용자는 새로운 프로토콜을 시험하거나 새로운 하드웨어를 지원하는 것과 같은 필요에 따라 원래의 구성을 변경할 수 있..

Unix & Linux/Kernel 2021.06.10