Configure Kernel Build Environment And kernel & root file system Build 2018-09-27 VLSI Design Lab 1
지난시간에... 우리는 kernel compile을위하여 cross compile 환경을구축했음. UBUNTU 12.04에서 arm-2009q3를사용하여 간단한 c source를빌드함. 한번은 intel CPU를위한 gcc로, 한번은 ARM CPU를위한 gcc로. ARM 명령어로컴파일한바이너리파일을실행할수있었나요? 'file' 명령어사용해봤나요? 그리고 u-boot 를빌드함. u-boot 는 bootloader 입니다. 2018-09-27 VLSI Design Lab 2
kernel compile 2018-09-27 VLSI Design Lab 3
Kernel configuration Linux Kernel 은많은기능을가지고있다. 그래서어떤기능을사용할지적절히선택해야함. 필요하다면추가적인기능을직접구현해줘야한다. 2018-09-27 VLSI Design Lab 4
Kernel configuration 문제는... 어떤기능을포함하고, 또필요하다면어떤기능을추가해야할지결정하는것은상당히어려움 특히 CPU 내부의디바이스와보드에설치된디바이스에대한심도깊은이해가필수적임. 따라서일반적으로 kernel configuration과 kernel patch는 CPU제작사와개발보드제작사에서진행함. 2018-09-27 VLSI Design Lab 5
kconfig, make menuconfig, make *_defconfig kconfig kernel의각디렉토리마다있음. kernel 빌드시사용되는변수들을선언함. 선언된변수들은 Makefile이나 C code의전처리기에서활용됨. menuconfig kconfig 파일에기술된내용에따라변수들의설정을 interface 환경에서변경할수있게해주는툴 menu-driven user 사용전 sudo apt-get install libncurses5-dev 를진행하여 ncurses 라이브러리를 설치한다. 2018-09-27 VLSI Design Lab 6
kconfig, make menuconfig, make *_defconfig 좌측부터 make menconfig, Kconfig, Makefile이다 1.Kconfig 파일에 MMU 변수에대한설정이저장되어있음. 1.MMU 변수는 bool type으로선언되어있다. 2. 본변수는 y인경우, CPU에서 MMU기반메모리관리를사용함을의미한다. 1. 따라서커널이컴파일할때이러한메모리관리특성에맞춰빌드된다. 이는후술할 Makefile 에서구현된다. 2.make menuconfig를실행하면 Kconfig 파일에기술한대로 MMU 변수에대한설정을진행할수있다. 3.MMU 변수는 Makefile에서사용된다. 1. 본 Makefile에서는 MMU 변수가선언되지않으면 MMUEXT 변수를 -nommu로선언한다. 2018-09-27 VLSI Design Lab 7
kconfig, make menuconfig, make *_defconfig 아그러면저거설정을하나하나다잡아줘야하네요? 예 필요하면디바이스드라이버를만들거나 Kernel 동작을수정해줘야합니다. 필요하면 Kconfig와 Makefile도설정해야합니다. 그렇지만 보드제작사나 CPU 제작사가미리기본설정값을만들어주는경우가있다. *_defconfig default configuration 특정개발보드나 CPU에대한기본설정들이저장되어있다. (Linux source)/arch/arm/configs에있음. 2018-09-27 VLSI Design Lab 8
kconfig, make menuconfig, make *_defconfig 즉 kconfig 에서켬파일과정에서사용할변수를선언하고 각변수의자료형 (bool, tristate) 각변수의의존성 (depends on, select) 각변수에대한설명 (help) make menuconfig 에서선언된변수의값을바꿀수있다. 그결과는.config 에저장된다. 이때변수값을바꾸는일련의과정은 CPU 나개발보드에대한심도깊은이해가필요하므로 제작사에서기본설정값을제공하는데그것이 *_defconfig 변수의값은 C 전처리기나, Makefile 에서사용된다. 따라서변수값에따라컴파일결과가달라진다. 2018-09-27 VLSI Design Lab 9
Let's build kernel 지난시간에소스코드다받았나요? SV210_source.zip 의압축도다풀었나요? 2018-09-27 VLSI Design Lab 10
Let's build kernel 소스코드압축해제 tar -xvf linux-2.6.32-hanback.tar.bz2 Linux Source Directory 로이동 cd linux-2.6.32-hanback Makefile 수정 gedit Makefile & ( 실행에아주약간의시간이걸린다.) 184번째줄에 arm-none-linux-gnueabi-gcc의경로를기입한다. arm-none-linux-gnueabi-gcc 의경로는 which arm-none-linux-gnueabi-gcc 로확인가능 2018-09-27 VLSI Design Lab 11
Let's build kernel 주의 끝에 gcc나 g++ 같은것을붙이지않는다. 파란색주석을읽어보면알겠지만 CROSS_COMPILE 변수는접두사를저장하는변수이기때문이다. 2018-09-27 VLSI Design Lab 12
Let's build kernel kernel configuration make empos3sv210_linux_defconfig build make zimage 2018-09-27 VLSI Design Lab 13
rootfs build 2018-09-27 VLSI Design Lab 14
rootfs 시작하기전에 랩사이트에서 mkyaffs2image를다운로드 이후작업디렉토리로복사 sudo su 입력 tar -xvf rootfs_441.tar.bz2 chmod 777 mkyaffs2image./mkyaffs2image rootfs_441 rootfs_441.yaffs2 2018-09-27 VLSI Design Lab 15
다음시간준비물 다음시간에는 Target 보드에그동안빌드한 bootloader Kernel rootfs 를올립니다. 이때 USB 2.0포트가 2개필요합니다. 따라서본인노트북에 USB 2.0 포트가 2개가없다면 USB 허브를챙겨옵니다. (3.0 무관, C type 연결불가하므로 2.0 / 3.0 최소 2개연결할수있도록준비.) 2018-09-27 VLSI Design Lab 16