ARM Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

202239
1625
172599


[2장] 라즈베리 파이 설정 - 오타 공지(48 페이지 상단) Question_Announcement

『디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 2』 책의 저자 '김동현'입니다. 
'2장: 라즈베리 파이 설정'에 오타가 있어 공지드립니다.

48 페이지 상단
----
이어서 다음 명령어를 입력해 폰트 프로그램을 설치합시다.
# apt-get install ibus
# apt-get install ibus-hangul
# fonts-unfonts-core

설치가 끝나면 라즈베리 파이를 재부팅합니다.
---

'fonts-unfonts-core'는 'apt-get install fonts-unfonts-core' 로 변경돼야 합니다.

(Before)
# fonts-unfonts-core

(After)
# apt-get install fonts-unfonts-core

원고 파일에 수정 내용이 담긴 메모를 추가한 스틸 컷은 아래와 같습니다.


편집 과정에서 오타나 오류를 잡기 위해 최선을 다했으나 미비한 점이 있어 죄송합니다.

명령어에 오류가 있는 부분을 지적해주신 독자님께 감사드리고 이 내용은 출판사 편집자님께도 말씀드려 다음 2판에 적용하도록 하겠습니다. 

---
"혹시 궁금한 점이 있으면 댓글로 질문 남겨주세요. 아는 한 성실히 답변 올려드리겠습니다!"

​Thanks,
Guillermo Austin Kim(austindh.kim@gmail.com)
---


덧글

  • ㅇㅇ 2020/07/08 18:26 # 삭제 답글

    디버깅을통해배우는 리눅스커널의 구조와원리1 책을 읽고 있는 독자인데요, 71쪽에 다음 명령어를 입력하면 schedule()함수의 어셈블리 코드만 볼 수 있다고 하였고 밑에 vmlinux: file format elf32-littlearm 이후로 어셈블리코드가 쫘라락 나오는데 제가 했을때는 vmlinux: file format elf32-littlearm 까지만 출력되고 밑에 어셈블리코드가 안나오고 끝납니다. 라즈베리파이4를 사용하고 있고 브랜치라던가 맞추라는건 다 맞췄습니다. 빌드할때 라즈베리파이4용 sh도 이 블로그에서 적용했구요. 도와주세요.
  • ㅇㅇ 2020/07/08 18:29 # 삭제

    아 참고로 -d를 -x로 바꾸니까 뭔가 이상한게 막 뜨긴 했습니다
  • AustinKim 2020/07/08 18:48 #

    objdump가 가끔 제대로 출력이 안될 때가 있습니다. 조금 무식한 방법이지만(제가 사용) 아래 커맨드를 입력하시면 확인하실 수 있습니다.

    * 'objdump -d vmlinux' 출력 결과를 code_vmlinux.txt 파일에 저장

    root@raspberrypi:/home/pi/rpi_kernel_src/out# objdump -d vmlinux > code_vmlinux.txt

    * assem_code 디렉터리를 생성
    * code_vmlinux.txt 파일을 assem_code 디렉터리에 복사
    * assem_code 디렉터리로 이동

    root@raspberrypi:/home/pi/rpi_kernel_src/out# mkdir assem_code
    root@raspberrypi:/home/pi/rpi_kernel_src/out#cp code_vmlinux.txt assem_code/
    root@raspberrypi:/home/pi/rpi_kernel_src/out#cd assem_code
    root@raspberrypi:/home/pi/rpi_kernel_src/out/assem_code#

    schedule 스트링 검색

    root@raspberrypi:/home/pi/rpi_kernel_src/out/assem_code#egrep -nr schedule *
    ...
    1912588:80811ffc: e59f2070 ldr r2, [pc, #112] ; 80812074 <__schedule+0x944>
    1912589:80812000: e59f0068 ldr r0, [pc, #104] ; 80812070 <__schedule+0x940>
    1912595:80812018: eafffe47 b 8081193c <__schedule+0x20c>
    1912596:8081201c: e59f3048 ldr r3, [pc, #72] ; 8081206c <__schedule+0x93c>
    1912599:80812028: 1afffef0 bne 80811bf0 <__schedule+0x4c0>
    1912601:80812030: e59f0040 ldr r0, [pc, #64] ; 80812078 <__schedule+0x948>
    1912606:80812044: eafffeea b 80811bf4 <__schedule+0x4c4>
    1912621:8081207c <schedule>:
    1912633:808120a8: 0a000002 beq 808120b8 <schedule+0x3c>
    1912636:808120b4: 0a000008 beq 808120dc <schedule+0x60>
    1912641:808120c8: ebfffd98 bl 80811730 <__schedule>

    code_vmlinux.txt 파일의 1912621 라인에 schedule() 함수의 위치 확인

    code_vmlinux.txt 파일의 1912621 라인을 오픈하기

    root@raspberrypi:/home/pi/rpi_kernel_src/out/assem_code#vi code_vmlinux.txt -c :1912621

    1912621 8081207c <schedule>:
    1912622 8081207c: e1a0c00d mov ip, sp
    1912623 80812080: e92dd818 push {r3, r4, fp, ip, lr, pc}
    1912624 80812084: e24cb004 sub fp, ip, #4
    1912625 80812088: e52de004 push {lr} ; (str lr, [sp, #-4]!)
    1912626 8081208c: ebe3f7d0 bl 8010ffd4 <__gnu_mcount_nc>
    1912627 80812090: e1a0200d mov r2, sp
    1912628 80812094: e3c23d7f bic r3, r2, #8128 ; 0x1fc0
    1912629 80812098: e3c3303f bic r3, r3, #63 ; 0x3f
    1912630 8081209c: e593300c ldr r3, [r3, #12]
    1912631 808120a0: e5932000 ldr r2, [r3]
    1912632 808120a4: e3520000 cmp r2, #0
    1912633 808120a8: 0a000002 beq 808120b8 <schedule+0x3c>



  • 2020/07/08 18:46 # 답글 비공개

    비공개 덧글입니다.
  • ㅁㄴㅇㄹ 2020/07/12 17:32 # 삭제 답글

    94페이지에 나온것같이 직접 코드를 작성하고 빌드한 후 커널 이미지를 설치하라는 말이 있는데 이게 실습을 할 때마다 커널을 컴파일해주고 설치해줘야 하는건가요?? 왜ㅣ 이런 질문을 하냐면 커널소스를 한번 컴파일 할 때마다 시간이 너무 오래걸리기 때문입니다.(작업중일때 왼쪽에 CC뜨는 그것) 어떻게 하는게 좋을까요?
  • AustinKim 2020/07/12 17:47 #

    커널 소스를 빌드를 마무리한 다음에 커널 이미지를 설치해야 빌드한 결과가 라즈베리 파이에 반영이 됩니다.

    이미 커널 소스를 빌드한 다음에 커널 소스를 수정하면 수정된 코드만 빌드가 됩니다. 이 경우 이미지 커널 소스 빌드와 설치 시간이 오래 걸리지 않습니다. 물론 처음 커널 소스를 빌드하면 시간이 오래 걸리는 건 사실이죠.

    '작업중일때 왼쪽에 CC뜨는 그것'에 대해서는 정확한 메시지를 알려주시면 확인 후 답을 드릴 수 있을 것 같습니다.

    감사합니다.
  • 다채로운 공룡 2020/07/13 18:02 #

    이 'CC'기호는 56 페이지의 예제 코드를 의미합니다.
  • AustinKim 2020/07/13 19:34 #

    'CC'의 정체를 알려주셔서 감사합니다.

    CC [M] net/bluetooth/bnep/core.o
    CC [M] fs/dlm/recover.o
    CC [M] sound/soc/codecs/cs42xx8-i2c.o

    커널을 빌드할 때는 원래 위와 같은 메시지가 출력이 되며, 이는 오류를 나타내는 것은 아닙니다.
    참고로, 다른 리눅스 커널을 빌드해도 같은 메시지가 출력됩니다.
  • 2020/07/12 17:48 # 답글 비공개

    비공개 덧글입니다.
  • 폭8 2020/07/13 12:34 # 삭제 답글

    컴파일 속도가 느리다면, 라즈베리파이 커널을 리눅스pc에서 크로스 컴파일한 뒤에 보드에 올리는 방법도 있습니다 "라즈베리파이 커널 크로스 컴파일" 구글링 해보십쇼
  • 폭8 2020/07/13 12:37 # 삭제 답글

    오히려 커널 크로스컴파일해서 보드에 올리는게 정통적인 방식이죠. SoC 및 저장장치 사양이 좋아져서 임베디드 보드에서 직접 커널 컴파일하는 시대가 되었군요..
  • AustinKim 2020/07/13 13:12 #

    네, 실전 개발에서는 대부분 크로스 컴파일 방식을 사용하곤 하죠.
    좋은 의견 주셔서 감사합니다.
  • 2020/07/13 13:12 # 답글 비공개

    비공개 덧글입니다.
  • 2020/07/13 19:34 # 답글 비공개

    비공개 덧글입니다.
댓글 입력 영역