7주차-LINUX2(2)

Chan·2021년 5월 25일
0

hancom

목록 보기
11/45
  • 리눅스 3요소 : 커널, 부트로더, 루트파일시스템

커널: 커널은 강력한 경영진(하드웨어)을 위해 일하는 바쁜 비서입니다. 비서의 할 일은 직원 및 대중(사용자)으로부터 수신되는 메시지 및 요청(프로세스)을 경영진에게 전달하고, 어디에 무엇이 저장되어 있는지 기억(메모리)하고, 특정한 시간에 누가 경영진을 얼마 동안 만날 수 있는지 결정하는 것입니다.

부트로더: 운영 체제가 시동되기 전에 미리 실행되면서 커널이 올바르게 시동되기 위해 필요한 모든 관련 작업을 마무리하고 최종적으로 운영 체제를 시동시키기 위한 목적을 가진 프로그램

루트파일시스템: 리눅스 디렉토리 구조의 최상위 위치인 "/"에 연결된 파일 시스템, 리눅스 실행시 필요한 데이터와 프로그램 저장

  • 툴체인 : 타겟 보드에서 실행할 프로그램 개발을 위한 호스트 시스템의 소프트웨어, 기본 구성은 컴파일러, 디버거, 라이브러리, 유틸(어셈블러,링커 등)

  • gcc : GNU compiler collection : GNU 프로젝트에서 만든 c, c++, Fortran, Java 등등 컴파일러 모음 (오픈소스)

O(1) scheduler : 일이 많아도 처리하는 시간이 똑같음
O(N) : 시간이 N배 걸림


실습003 리눅스 커널 포팅 (2416->2450보드)

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 연결 문제)
  • 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차 에러 못뚫음, 에러
profile
Backend Web Developer

1개의 댓글

comment-user-thumbnail
2021년 5월 25일

안녕하세요~! 작성자님
좋은 글 읽고 갑니다.~

답글 달기

관련 채용 정보