며칠이 지나서야 커널 프로그래밍을 발견하기 위해 약간의 프로젝트를 진행하고 있습니다. 그러나 나는 인터넷에서 많은 것을 읽었으며 커널 컴파일에 관한 질문을하기 전에 어떤 점에서 여전히 길을 잃었다.다운로드 Torvalds Kernel, QEMU로 다시 컴파일하십시오.
커널 프로그래밍을해야한다면 Linus Torvalds의 Linux 소스를 사용하는 것이 가장 좋은 방법이라고 생각했습니다. 그것은
- 다운로드 커널의 소스 : 그래서 다음 (맥 OS 높은 시에라에서)를 않았다
vagrant init
vagrant up
vagrant ssh
- 가 연결되면, 내가 입력 : 는 리눅스 소스에 얻기 위하여
cd /vagrant/linux
폴더make menuconfig
난 그냥 확인을 눌러 압축을 푼 저장/sudo make -j 4 && sudo make modules_install -j 4 && sudo make install -j 4
agrant @vagrant-ubuntu-trusty-64:/vagrant/Kernel-Programming/linx-kernel$ sudo make -j 4 && sudo make modules_install -j 4 && sudo make install -j 4
CHK include/config/kernel.release
CHK include/generated/uapi/linux/version.h
CHK include/generated/utsrelease.h
CHK scripts/mod/devicetable-offsets.h
CHK include/generated/timeconst.h
CHK include/generated/bounds.h
CHK include/generated/asm-offsets.h
CALL scripts/checksyscalls.sh
CHK include/generated/compile.h
SKIPPED include/generated/compile.h
CC my_syscalls/uptime.o
AR my_syscalls/built-in.o
CC[M] net/ipv4/netfilter/ipt_ECN.o
In file included from net/ipv4/netfilter/ipt_ECN.c:20:0:
net/ipv4/netfilter/ipt_ECN.c: In function 'set_ect_ip':
./include/uapi/linux/netfilter_ipv4/ipt_ECN.h:16:27: error: 'XT_DSCP_MASK' undeclared(first use in this function)
#define IPT_ECN_IP_MASK (~XT_DSCP_MASK)
^
net/ipv4/netfilter/ipt_ECN.c:33:18: note: in expansion of macro 'IPT_ECN_IP_MASK'
if ((iph->tos & IPT_ECN_IP_MASK) != (einfo->ip_ect & IPT_ECN_IP_MASK)) {
^
./include/uapi/linux/netfilter_ipv4/ipt_ECN.h:16:27: note: each undeclared identifier is reported only once for each function it appears in
#define IPT_ECN_IP_MASK (~XT_DSCP_MASK)
^
net/ipv4/netfilter/ipt_ECN.c:33:18: note: in expansion of macro 'IPT_ECN_IP_MASK'
if ((iph->tos & IPT_ECN_IP_MASK) != (einfo->ip_ect & IPT_ECN_IP_MASK)) {
^
net/ipv4/netfilter/ipt_ECN.c: In function 'ecn_tg_check':
./include/uapi/linux/netfilter_ipv4/ipt_ECN.h:16:27: error: 'XT_DSCP_MASK' undeclared(first use in this function)
#define IPT_ECN_IP_MASK (~XT_DSCP_MASK)
^
net/ipv4/netfilter/ipt_ECN.c:105:23: note: in expansion of macro 'IPT_ECN_IP_MASK'
if (einfo->ip_ect & ~IPT_ECN_IP_MASK)
{
^
make[3]: *** [net/ipv4/netfilter/ipt_ECN.o] Error 1
make[2]: *** [net/ipv4/netfilter] Error 2
make[1]: *** [net/ipv4] Error 2
make: *** [net] Error 2
make: ***Waiting for unfinished jobs....
그러나, 나도 몰라 : 0
지금, 나는 조금 오류가 발생합니다. 또한 편집이 완전히 완료 되었더라도 "새로운 Linux 컴파일"을 어떻게 테스트 할 수 있습니까? 내가 syscall을 추가했기 때문에 그것이 작동하는지 아니면 안되는지 테스트하고 싶습니다 ... update-initramfs
에 대해 뭔가 발견했지만 컴파일 된 커널이 우분투가 아니기 때문에 링크/포인트가 표시되지 않습니다. 모든 설명은
감사
아마도 커널 설정에 문제가있을 수 있습니다. 대신 기본 구성을 사용하십시오. 'make i386_defconfig' (32 비트 x86 용),'make x86_64_defconfig' (64 비트 x86 용). –
고마워. 그런데 내 syscall이 작동하는지 알아보기 위해 어떻게 커널을로드 할 수 있니? – Emixam23
간접적 인 syscall 확인 : http://man7.org/linux/man-pages/man2/syscall.2.html –