noth - 우분투 커널이야기 (2009y05m30d)
TRANSCRIPT
Session 5
주제 : 우분투 커널 이야기 발표시간 : 15 분 발표자 : 노쑤 활동지역 http://www.ubuntu.kr
http://www.kernel.krhttp://www.androidside.com
개인 페이지 : http://kernel.gnukorea.com
우분투 커널 이야기
예상되는 대상
커널에 대해서 관심은 있지만 전혀 모르는 사람 주요 주제
커뮤니티에서 언급되는 커널에 대한 용어 이야기
우분투 커널과 리눅스
커널 빌드
커널 모듈
부트로더
리눅스 커널
Unix OS 의 clone 이다 POSIX 및 SUS 를 따른다 멀티태스킹 , 가상메모리 , 공유메모리 , demand
loading, shared copy-on-write excutable, 메모리 관리 , IPv4, IPv6
GPL LINUX® is a registered trademark
of Linus Torvalds http://www.kernel.org
우분투 커널
우분투와 우분투 패밀리 제품을 위한 양질의
리눅스 커널 제공 모든 우분투 관련 기술은 리눅스 커널에 기반한다 .
최고의 free swotware 개발 플랫폼 https://wiki.ubuntu.com/KernelTeam
우분투 커널
개방형 모델에서 , 커뮤니티와 업스트림 기반으로 공동 개발한다 .
사용자 기대에 부흥하게 광범위한 하드웨어 지원한다 .
리눅스 커널에 대한 중앙 패키지 관리 아키텍처와 포트를 지원합니다
바닐라 리눅스 커널 빌드 및 패키징 지원 리눅스 커널 버젼을 사용한다 .
GNU/Linux
리눅스냐 GNU/Linux 냐 ?
운영체제에서 커널 (kernel)
GNU 소프트웨어 ( 윈도우 시스템 , 컴파일러 , 다양한 셸 , 개발 도구 , 편집기 , 유틸리티 )
적절한 이름으로 "GNU/ 리눅스 " 를 선택
단지 커널만 언급할 경우에 " 리눅스 " 라고 부른다 하지만 현재 구별없이 사용되고 있다
GNU/Linux
커널 버젼 알아보기
$ uname -a
$ finger [email protected] X.Y.Z, X.Y.Z.A, X.Y.Z-rcB, X.Y.Z-rcB-mm
X 부분은 메이저 버전 번호이며
1995 년 3 월에 1.2.0, 1996 년 5 월에 2.0 이 릴리즈 Y 부분이 짝수이면 안정버전 , 홀수이면 개발 버젼
커널소스 받아보기 git
sudo apt-get install git git-core http://kernel.ubuntu.com/git/ git clone git://kernel.ubuntu.com/ubuntu/ubuntu-
karmic.git git tag | grep Ubuntu* git checkout Ubuntu-2.6.27-7.14 git fetch
커널 설정하기
make help Cleaning targets Configuration targets Other generic targets Static analysers Kernel packaging Documentation targets Architecture specific targets
커널 설정하기
make defconfig make allnoconfig make allyesconfig make allmodconfig make randconfig make oldconfig make silentoldconfig make config
make menuconfig make xconfig make gconfig
커널 빌드하기
wget ftp://ftp.kernel.org/pub/linux/kernel/2.6/linux-2.6.29.3.tar.bz2
gpg tar xvjf linux-2.6.29.3.tar.bz2 cd linux-2.6.29.3 make menuconfig make make install
커널 빌드하기
mkdir /tmp/kernel make mrproper make oldconfig make O=/tmp/kernel oldconfig make ARCH=arm mainstone_defconfig make ARCH=arm CROSS_COMPILE=armv5l- make V=1 all
커널 빌드하기
sudo apt-get install build-essential sudo apt-get install kernel-package sudo apt-get install libncurses5-dev make-kpkg --initrd kernel_image \
kernel_headers linux_source modules_image dpkg -i xxx.deb
커널 모듈
실행중인 리눅스 커널에 링킹할 수 있는
커널 오브젝트로 확장자 ko 이다 모노리릭 커널인 리눅스 커널의 단점을 보완한다 리눅스 커널을 가볍게 만든다 많은 디바이스 드라이버들이 커널 모듈 형태로
존재한다 .
시스템의 /lib/modules/$( uname -r ) 디렉토리에
존재한다
DKMS
DKMS 는 일반적인 커널에 없는 모듈소스를 만드는 프레임웍이다
새로운 버젼의 커널이나 새로운 버젼의 모듈이 설치되면 자동으로 컴파일해서 설치한다
$ dkms status
그래픽카드 모듈이나 버춸박스 모듈이 이렇게
구성돼 있다
부트로더
부트로더 (Boot loader) 란 운영 체제가 시동되기 이전에 미리 실행되면서 커널이 올바르게 시동되기 위해 필요한 모든 관련 작업을 마무리하고 최종적으로 운영 체제를 시동시키기 위한 목적을 가진 프로그램을 말한다 .
mbr grub
Grub
BIOS 가 부팅 장치를 찾고 MBR 을 읽어온다 .
MBR 에 GRUB 스테이지 1 이 있으며 , 이는 스테이지 1.5 나 2 를 불러온다 .
스테이지 1.5 는 MBR 직후 30 킬로바이트 영역에 저장되며 이는 스테이지 2 를 불러온다 .
GRUB 스테이지 2 는 부트 메뉴나 프롬프트를 보여 준다 .
기본값 커널이나 사용자가 선택한 커널을 불러 온다 .
Grub
grub> root (hd0,0)
grub> find /boot/grub/stage1
(hd0,0)
grub> setup (hd0)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/e2fs_stage1_5" exists... yes
Running "embed /boot/grub/e2fs_stage1_5 (hd0)"... 17 sectors are embedded..........
/boot/grub/menu.lst"... succeeded
Done.
유용한 팁
make headers_install make prepare make dir/ make dir/file[ois] make dir/file.ko make tags make cscope nm vmlinux | sort | less gdb vmlinux /proc/kcore
다른 용어들
fuse kvm hal kernel thread uuid initrd alsa pulseaudio