2017-11-29 3 views
0

며칠이 지나서야 커널 프로그래밍을 발견하기 위해 약간의 프로젝트를 진행하고 있습니다. 그러나 나는 인터넷에서 많은 것을 읽었으며 커널 컴파일에 관한 질문을하기 전에 어떤 점에서 여전히 길을 잃었다.다운로드 Torvalds Kernel, QEMU로 다시 컴파일하십시오.

커널 프로그래밍을해야한다면 Linus Torvalds의 Linux 소스를 사용하는 것이 가장 좋은 방법이라고 생각했습니다. 그것은

  • 시작 터미널 및 실행 https://github.com/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에 대해 뭔가 발견했지만 컴파일 된 커널이 우분투가 아니기 때문에 링크/포인트가 표시되지 않습니다. 모든 설명은

    감사

  • +0

    아마도 커널 설정에 문제가있을 수 있습니다. 대신 기본 구성을 사용하십시오. 'make i386_defconfig' (32 비트 x86 용),'make x86_64_defconfig' (64 비트 x86 용). –

    +0

    고마워. 그런데 내 syscall이 작동하는지 알아보기 위해 어떻게 커널을로드 할 수 있니? – Emixam23

    +0

    간접적 인 syscall 확인 : http://man7.org/linux/man-pages/man2/syscall.2.html –

    답변

    1

    좋은 일 작업을 문서화하고 리눅스 커널 지금 당신의 질문에 대답

    맥 OS X의

    에 컴파일 얻기 위해 필요한 조정의 자식/블로그 많은에 게시하시기 바랍니다.

    1. 가장 쉬운 방법은 VMware/VirtualBox를 실행하는 것입니다. 그들은 똑바로 앞으로. 다음 scp 이미지 및 테스트.
    2. QEMU는 커널을 테스트하는 가장 좋은 방법입니다. 그러나 일반 대중이 널리 사용하지는 않습니다. 또한 작동 시키려면 노력이 필요합니다. 또한 syscall을 테스트 할 때 Root FS를 컴파일해야합니다 (시스템 콜을 사용하여 c 코드를 작성하고 init 프로세스로 정의 할 수 있습니다).

    나는 당신에게 응답 해 주길 희망합니다.

    +0

    이 답변을 주셔서 감사합니다. 그러나 내 커널 (소스)을 QEMU – Emixam23

    +0

    'qemu-system-i386 -kernel bzImage -initrd initrd.img-2.6.32.59 -m 512M'을 사용할 수 있습니다. PATH_KERNEL과 PATH_INITRD는 그에 따라 사용됩니다. initrd를 생성하는 방법에 유의하십시오. 그 자체로 다른 질문을합니다. 나는 Rob Landley 유튜브 비디오가 최고라고 생각합니다. 간단히 말해 Hello World C 프로그램을 차단하고 크로스 컴파일 바이너리를 init로 작성합니다. initrd를 만듭니다. https://www.youtube.com/watch?v=Sk9TatW9ino 링크 – Devidas

    관련 문제