Debian/Ubuntu Linux 언더코어 프로그래머 필수
Debian/Ubuntu Linux 언더코어 프로그래머 필수
Debian/Ubuntu Linux 커널을 업그레이드하고 싶거나, 커널을 위한 새로운 모듈을 개발하고 싶거나, 하드웨어에 새 드라이버를 쓰고 싶거나, 이 모든 것은 Debian/Ubuntu Linux 커널 프로그래밍과 관련이 있습니다.
커널 프로그래머로서 몇 가지 소프트웨어는 네가 반드시 가지고 있어야 한다. 네가 커널 프로그래밍을 하는 몇 가지 보물로 간주해라. 다음은 내가 일일이 열거한다.
1、gcc
명성이 자자한 gcc는 아무도 모를 것 같지 않아요?그것은 모든 프로그래머가 반드시 먼저 설치해야 할 무기이다.그러나 일반적으로 당신이 설치한 Debian 시스템이라면 기본적으로 설치되어 있을 것입니다.Ubuntu라면 설치해 보세요. 설치 방법은 바로 입력입니다.
apt-get install gcc/PRE>
/CENTER>
2、make
만약 당신이 유용한 프로그램을 실제로 썼다면,make clean,make,make install 등 명령을 입력했을 것입니다. make는 원본 코드 유지보수 도구입니다. 자동으로 다시 컴파일해야 할 원본 파일을 검출하고, 당신이 설정한 컴파일 규칙에 따라 프로그램을 다시 컴파일할 수 있습니다.여기도 긴 말 안 할게요. 모르는 분들은 구글에서 하세요.그러나 일반적으로 당신이 설치한 Debian 시스템이라면 기본적으로 설치되어 있을 것입니다.Ubuntu라면 설치해 보세요. 설치 방법과 같이 입력:
apt-get install make/PRE>
3、kernel-source
이 가방의 명칭에서 이미 알았습니다. 이것은 내부 원본 패키지입니다.apt-cache search kernel-source에서 핵 원본 패키지를 검색하고 uname-r 명령으로 현재 시스템의 핵 버전을 확인한 다음 apt-get install kernel-source-xxx로 핵 버전과 일치하는 핵 원본 패키지를 설치할 수 있습니다.
그러나 나는 너에게 이렇게 하는 것을 건의하지 않는다. 왜냐하면 대부분의 발행판인 리눅스의 원본 코드 패키지는 너와kernel에서 온 것이 아니기 때문이다.org에서 다운로드한 것은 완전히 일치한 것이다. 발행자들이 수정하고 최적화된 패키지일 것이다. 발행판의 제작자들은 심혈을 기울였지만 우리 프로그래머들에게 이것은 좋은 일이 아니다. 대부분 발행판의 원본 코드 패키지에 필요한 헤더 파일과 유용한 스크립트 프로그램이 부족하기 때문에 우리는 내부 모듈을 작성할 때 어려움을 겪게 된다.예를 들어 컴파일할 때 어떤 헤더 파일을 찾을 수 없다고 잘못 보고할 수도 있고, 또 어떤 스크립트 프로그램이 존재하지 않는다고 잘못 보고할 수도 있다.
자네가 바로kernel에 가면.org에서 새 핵을 다운로드해서 업그레이드된 핵을 컴파일하고 이를 바탕으로 핵 프로그래밍을 하는 것은 좀 수월할 수 있습니다. 적어도 제가 뒤에서 말한 이 가방들은 설치하지 않아도 됩니다. KERNELDIR 변수는 당신의 핵 원본 코드 패키지의 위치로 설정하면 충분합니다.
여기서는 Debian 3.1, 내장 2.6.8-2-386을 바탕으로 내장 프로그래밍 환경을 준비하는 것을 가르쳐 드리겠습니다.그럼 차례대로 이 몇 개의 명령으로kernel-source 패키지를 설치해 보세요.
apt-cache search kernel-source
uname -r/PRE>
/CENTER>
apt-get install kernel-source-xxxx
주: 만약 당신이 핵을 다시 컴파일하고 싶지 않다면, 핵 원본 코드 패키지kernel-source는 완전히 다운로드하지 않을 수 있습니다.
4、kernel-headers
이것은 내장 소스 코드 헤더 패키지입니다. 내장 모듈 개발을 하든 드라이버 개발을 하든 이 패키지는 반드시 설치해야 합니다.내부 핵 모듈의 작성자로서 보통 내부 핵 안의 일부 물건, 예를 들어 내부 핵 헤드 파일, 내부 핵 데이터 구조의 설명 등을 호출하기 때문이다.그것 안에는 몇 가지 관건적인 커널 파일이 포함되어 있다.그렇지 않으면 커널을 컴파일할 때 다음과 같은 오류가 발생합니다.
HOSTCC scripts/basic/fixdep
scripts/basic/fixdep.c:105:23: error: sys/types.h: /PRE>
/CENTER>
다음 명령을 입력하여 설치합니다.
apt-cache search kernel-headers
uname -r
apt-get instakk kernel-headers-xxxx/PRE>
/CENTER>
주: Ubuntu에서 이 가방의 앞에 linux-가 붙은 것 같아서 linux-kernel-headers가 됐어요.
이전에kernel-kbuild 패키지를 설치한 적이 없다면 이 패키지를 설치하는 과정에서kernel-kbuild 패키지를 설치합니다. 이 패키지는 아래에 설명되어 있습니다.
5、kernel-kbuild
이 패키지는 내장 모듈을 컴파일하는 데 사용됩니다. 이 패키지를 다운로드하여 설치하면/usr/src 디렉터리에kernel-kbuild-xxxx로 시작하는 디렉터리가 하나 더 있습니다. 아래에는scripts만 있는 디렉터리입니다. 이것은 내장 모듈을 컴파일하는 일부 스크립트 프로그램입니다.설치 방법은 동일합니다.
apt-cache search kernel-kbuild
uname -r
apt-get install kernel-kbuild-xxxx/PRE>
/CENTER>
주: 위에kernel-headers 패키지를 설치한 후/usr/src/kernel-headers-xxx 디렉터리에 있는scripts 디렉터리가 있는데 사실은/usr/src/kernel-kbuild-xxx 디렉터리에 있는scripts에 대한 링크입니다.
6、build-essential
이 가방은deb 패키지를 만드는 과정에서 중요한 역할을 하는 패키지의 정보 목록을 포함하고 있습니다. 이 패키지를 만들고 싶지 않으면 이 시계를 설치할 필요가 없습니다. 이 패키지를 만들어야 한다면 이 패키지를 설치하는 것이 좋습니다.설치 방법:
apt-get install build-essential/PRE>
/CENTER>
7、kernel-package
만약 네가 내부 렌즈를 deb 패키지로 만들고 싶다면, 반드시 이 패키지를 설치해야 한다.즉, 이 패키지가 설치되어 있어야만 make-kpkg 명령을 사용할 수 있다는 것이다.설치 방법은 동일합니다.
apt-get install kernel-package/PRE>
/CENTER>
8、initrd-tools
시작 과정의 initrd 렌즈를 만들고 싶다면, 이 가방은 없어서는 안 된다.이 가방을 설치한 후에야 mkinitrd 명령을 사용할 수 있습니다.설치 방법:
apt-get instakk initrd-tools/PRE>
/CENTER>
마지막으로 내장 모듈 프로그래밍 예시를 보여 주십시오!
커널 모듈 프로그램을 작성했다면 소스 코드는 다음과 같습니다.
/* hello.c */
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
static int hello_init(void)
{
printk(KERN_ALERT "Hello, linux kernel module
");
return 0;
}
static void hello_exit(void)
{
printk
(KERN_ALERT "Goodbye, I've created a linux kernel module sucessfully
");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");/PRE>
/CENTER>
이 소스 프로그램에서makefile을 작성해야 합니다. 내용은 다음과 같습니다.
#Makefile for hello.c file
#
KERNEL_DIR:=/usr/src/linux
obj-m:=hello.o
default:
$(MAKE) -C $(KERNEL_DIR) SUBDIRS=$(PWD) modules
clean:
$(RM) .*.cmd *.mod.c *.o *.ko -r .tmp/PRE>
/CENTER>
주의: 여기 KERNELDIR는 커널 소스 코드 헤더 파일이 있는 디렉토리의 상위 디렉토리이며, 일반적으로 커널 소스 코드 디렉토리를 말합니다.이 디렉터리는 일반적으로arch,drivers,fs,include,init,ipc,kernel,lib,mm,net,scripts,usr,sound,security 등 디렉터리를 포함한다.
이 예시에서/usr/src/linux는/usr/src/kernel-headers-2.6.8-3 디렉터리를 가리키는 링크입니다.
makefile을 작성하면make명령을 입력하여hello를 생성할 수 있습니다.ko 내장 모듈입니다. 그리고 사용할 수 있습니다.
insmode hello.ko/PRE>
/CENTER>
커널 모듈에 명령을 추가하고 다음을 수행합니다.
rmmod hello/PRE>
/CENTER>
커널 모듈을 삭제합니다.
물론, 작업 과정에서, 당신은 dmesg 명령으로 실행 결과를 볼 수 있습니다.Linux 제휴 수집 및 정리
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.