커널: 커널은 강력한 경영진(하드웨어)을 위해 일하는 바쁜 비서입니다. 비서의 할 일은 직원 및 대중(사용자)으로부터 수신되는 메시지 및 요청(프로세스)을 경영진에게 전달하고, 어디에 무엇이 저장되어 있는지 기억(메모리)하고, 특정한 시간에 누가 경영진을 얼마 동안 만날 수 있는지 결정하는 것입니다.
부트로더: 운영 체제가 시동되기 전에 미리 실행되면서 커널이 올바르게 시동되기 위해 필요한 모든 관련 작업을 마무리하고 최종적으로 운영 체제를 시동시키기 위한 목적을 가진 프로그램
루트파일시스템: 리눅스 디렉토리 구조의 최상위 위치인 "/"에 연결된 파일 시스템, 리눅스 실행시 필요한 데이터와 프로그램 저장
툴체인 : 타겟 보드에서 실행할 프로그램 개발을 위한 호스트 시스템의 소프트웨어, 기본 구성은 컴파일러, 디버거, 라이브러리, 유틸(어셈블러,링커 등)
gcc : GNU compiler collection : GNU 프로젝트에서 만든 c, c++, Fortran, Java 등등 컴파일러 모음 (오픈소스)
O(1) scheduler : 일이 많아도 처리하는 시간이 똑같음
O(N) : 시간이 N배 걸림
linux-3.0.22.tar.gz 리눅스 공유폴더로 옮김
mount -t vboxsf vboxxx share
cp ./share/linux-3.0.22.tar.gz /tftpboot/
cd /tftpboot/
tar zxf linux-3.0.22.tar.gz
cd linux-3.0.22
make zImage (에러, export, defconfig 때문에)
make distclean
export CROSS_COMPILE=arm-none-linux-gnueabi-
export ARCH=arm
make s3c2410_defconfig (에러 해결 핵심)
make zImage
cp arch/arm/boot/zImage /tftpboot/
보드를 재시작 해서 동작을 확인 합니다.
원본 커널은 구동이 안되는 것을 알 수 있습니다.
2450용으로 포팅된 것이 아니고
2416용으로 포팅된 소스이기 때문입니다.
1차 시도 결과
###########################################
done
Bytes transferred = 2548600 (0x26e378)
Boot with zImage
Starting kernel ...
make menuconfig 들가서
Device drivers - character devices - serial drivers - samsung soc serial support 체크 확인
다시 첫화면에서,
System type - S3C UART to use for low-level messages 0->1 수정
2차 시도 결과
done
Bytes transferred = 2548608 (0x26e380)
Boot with zImage
Starting kernel ...
Uncompressing Linux... done, booting the kernel.
cd arch/arm/mach-s3c2416
cp mach-smdk2416.c mach-mds2450.c (앞으로 이거 내용을 수정할것임)
- 커널소스 2개 비교 (2416, 2450)
linux-3.0.22.tar.gz
2017-02-07-ported-linux-3.0.22.tar.gz
위 두 파일중 하나는 2416 커널 소스고 하나는 2450용으로 포팅된 커널 소스
두파일 압축 풀어서 beyond compare 프로그램으로 폴더 비교
1. 왼쪽 오른쪽에 폴더 열고
2. ctrl+A, 오른쪽 클릭, compare content
3. crc compare
C:\Users\hancom\Desktop\vboxxx\linux-3.0.22.tar\linux-3.0.22\linux-3.0.22\arch\arm\mach-s3c2416
폴더에 mach-smdk2416.c 파일과
C:\Users\hancom\Desktop\vboxxx\2017-02-07-ported-linux-3.0.22.tar\2017-02-07-ported-linux-3.0.22\linux-3.0.22answer\arch\arm\mach-s3c2416
폴더에 mach-mds2450.c 파일은 변수명, 함수명 등등만 다름
gedit mach-mds2450.c (아까 mach-smdk2416.c을 2450 이름으로 복사해놓은거)
mach-mds2450.c 파일 내용 전체 복사, 저장
cd ../../../
gedit arch/arm/tools/mach-types
맨 아랫줄에 mds2450 MACH_MDS2450 MDS2450 3495 추가
중간에 뭐 수정햇는데 안해도 ㄱㅊ.. 패스..
gedit arch/arm/mach-s3c2416/Kconfig
compare에서 kconfig 파일 열고 아랫부분 복사
gedit arch/arm/mach-s3c2416/Makefile
obj-$(CONFIG_MACH_MDS2450) += mach-mds2450.o 추가
make menuconfig
교재(299~305 슬라이드)를 참조하여 변경 (NFSv4.1, System type(Kconfig해야 생김) mds2450으로, 이 두개정도 바꾸면 됌)
cp .config arch/arm/configs/mds2450_defconfig
변경된 커널 설정을 파일로 백업
make distclean
make mds2450_defconfig
make zImage
cp arch/arm/boot/zImage /tftpboot/
zImage 다 만들고 옮겼으니 테라텀에서 확인
3차 시도 결과
2차 에러 뚫고 더 가다가 에러
drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
VFS: Unable to mount root fs via NFS, trying floppy.
VFS: Cannot open root device "nfs" or unknown-block(2,0)
(nfs 연결 문제)
교재(326 슬라이드) (추가)
교재(327 슬라이드) (추가)
// 에러나서 안함 -> 교재(328 슬라이드) (소스코드 교체했음)
#include <linux/smsc911x.h> (추가)
make menuconfig - device driver - network device support - ethernet - SMSC LAN911x... 체크
make distclean
make mds2450_defconfig
make zImage
cp arch/arm/boot/zImage /tftpboot/
zImage 다 만들고 옮겼으니 테라텀에서 확인
4차 시도 결과
3차 에러 못뚫음, 에러
안녕하세요~! 작성자님
좋은 글 읽고 갑니다.~