728x90
반응형
- 왜 리눅스 업데이트를 했나
- 커널 안에서 프로그래밍 하기 위해서 했음
- 우리가 커널을 직접 손보지는 않는다
- 기존의 소스를 복사해서 수정한다(= 포팅)
※ 리눅스 커널 안에서 만든 프로그램 실행 중 에러가 나면 리눅스가 먹통이 된다
=> 응용 프로그램과 달리 커널이 처리해줄 수 없으로
- 라즈베리 파이의 /usr/src/linux/ 폴더에서 커널 프로그래밍에 사용할 기본 소스파일들을 찾을 수 있다
- 우리가 사용할 디렉토리 경로
- /usr/src/linux/arch/mach-bcm2709
- 커널에서 프로그램을 짜고 build할 때 해당 디렉토리 내부의 내용을 참조
- 같은 리눅스라도 어떤 CPU를 사용하느냐에 따라 컴파일에 필요한 소스파일이 달라짐
- 필요 소스는 linux/arch/ 폴더에 칩 별로 분류되어 저장되어있다
- 우리가 사용할 디렉토리 경로
- 분할 컴파일
- 소스를 여러개로 분할하여 각각을 컴파일 후, 마지막에 링크하여 하나의 실행파일을 만드는 방식
- 컴파일 시간을 단축시킬 수 있다
- 소스 중 일부만 수정할 경우. 수정한 파일만 새로 컴파일하고 링크만 다시 한다
- make
- 지능적이고 선택적인 컴파일을 도와준다
- obj 파일이 없거나 소스파일(.c)이 수정될 경우만 컴파일함
- .c파일 마지막 수정시간이 .o 파일의 수정시간보다 더 뒤이면 재컴파일
- .config 파일
- 컴파일을 위해 선택한 정보들을 저장함
- make menuconfig
- /usr/src/linux 경로에서 아래 명령 실행
- apt-get install ncurses-dev
make menuconfig
----------------------------------------------------------------------------------------------------------------------
- 디바이스 드라이버 관련 설명
- 커널 컴파일 프로그램의 종류
- 직접 커널을 수정하는 프로그램
- 커널형 모듈
- 커널형 모듈
- 모듈을 추가할 수 있는 커널
- 모듈: 커널에 부가기능을 부착시키는 것
- 디바이스 드라이버 모듈(ddm), 리눅스 커널 모듈(lkm)이라 부름
- 윈도우의 경우에는 wdm(윈도우 드라이버 모듈)이라고 부른다
- 모듈: 커널에 부가기능을 부착시키는 것
- 커널에서 떨어진 모듈은 모듈 프로그램이라 부름
- 재부팅을 안해도 커널에 기능을 추가하여 실행시킬 수 있다
- 모듈을 추가할 수 있는 커널
- 응용 프로그램에서 사용하는 메모리는 OS에서 관리한다
- app이 활용하는 메모리를 할당해 주는 것은 OS
- app의 메모리 주소는 OS가 할당해준 가상 주소(유저 어드레스)
- app의 가상 주소를 실제 메모리 주소로 mapping할 때 MMU가 개입
- MMU(Memory Management Unit)
- CPU 내부의 메모리 관리 장치(HW)
- 커널 프로그램은 MMU 개입 없이 실제 주소를 다룰 수 있다
- 이때의 실제 주소를 커널 어드레스라고 한다
- 커널이 장치 접근에 대한 전권을 가지고 있음
- 응용 프로그램이 저수준으로 HDD의 파일을 읽고 쓸 때 kernel이 중간에서 중개역할을 한다
- 응용 프로그램이 파일을 읽고 쓰기위해 커널로 들어가는 입구가 커널의 모듈(접근할 HDD를 위한 모듈)
- 응용 프로그램에서 장치에 접근 = 장치 드라이버(SW)에 접근
- 커널에 키보드에 대한 모듈을 심어서 키보드 입력정보의 이동 경로를 제어할 수 있다(키보드 후킹)
- 키보드 입력 정보를 훔쳐올 수 있음
- 키보드 보안 프로그램은 키보드 후킹 모듈을 찾는 백신
- 조인 C의 표
----------------------------------------------------------------------------------------------------------------------
728x90
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
20151020 엄민웅 armCortex3 TIM, asm MEMORY_MODIFY (6) | 2015.10.20 |
---|---|
20151019 안향진 TIM2 delay_파이선 led on/off_code/data/stack view, load, memory clear (9) | 2015.10.20 |
20151016 박제혁 module_param, 장치의 타입, 모니터 프로그램 (12) | 2015.10.16 |
20151015(목)_박서연_업무일지_Monitor Program(1) (8) | 2015.10.15 |
20151013 김태현 라즈베리파이 커널 업데이트(작성중) (3) | 2015.10.13 |
20151012-김재홍-어셈블리_Context Switching (9) | 2015.10.13 |
20151008 - 김성주 - M3 : RCC / 어셈블리 : pushad를 이용한 구조체 삽입 (6) | 2015.10.08 |
20151007 - 권오민 - GPIO&AFIO / ASSEMBLY(C와 링크하기) (3) | 2015.10.07 |