전체적인 흐름분석도 벅차서 세부적인 코드분석은 하지 못했다..
Source Tree
\arch\arm\cpu | 각종 vendor별 CPU dependent Initialization code를 가진다. |
\arch\arm\cpu\arm7 | entry point인 start.S 파일을 가진다. |
\arch\arm\cpu\arm7 | |
\arch\arm\include | cpu관련 c파일 |
\board | 각종 vendor별 board dependent Initialization code를 가진다. |
\board\samsung\wmdk5250 | clock init, DMC init,.. |
\common | 각종 명령어, user interface main routine, CLI archtecture나 target board에 무관한 소프트웨어로 command구현되어 있다. |
\drivers | 각종 디바이스 드라이버를 가지고 있다. block , DMA, GPIO, I2C, input, MMC, MTD, net, PCI, RTC(real time clock dirver), serial,SPI, USB 등... |
\include | u-boot header정보 |
\include\config.mk | 컴파일 후 생성되는 파일로 보인다. ARCH, CPU, BOARD, VENDOR, SOC정보를 가짐. |
\include\configs\arndale5250.h | 보드에 대한 설정파일. |
\lib | |
\net |
|
부팅과정
SPL은 u-boot 의 기능 중 초기부분을 떼어서 만든거라고 봐도된다. 초기작업을 수행한 후 u-boot을 로딩한다. mcu에 따라 쓰는 것도 있고 안쓰기도 한다.
u-boot은 하드웨어 초기화를 수행한다음 최종적으로 kernel을 로딩한다.
출처 : http://processors.wiki.ti.com/index.php/The_Boot_Process
1. 하드웨어 초기화 : CPU clock ,Memory Timing, Interrupt, UART, GPIO등 초기화
코드상에서는 (lowlevel_init, board_init_f,board_init_r) 3가지 routine으로 분류하였다.
초기화라는 말이 상당히 추상적으로 들릴수도 있다. 짧은 지식으로 간단하게 말해보자면, cpu든 gpio든 ethernet이든 모두 구조체로 이루어져 있고, 이 구조체를 세팅해주는 작업이라고 하면 되려나?...
2. Image loading : flash memory에 있는 zImage, file system을 SDRAM으로 복사한다.
3. jump to kernel
전체적인 초기화 routine
arch\arm\cpu\armv7\start.S
reference : http://blog.naver.com/PostView.nhn?blogId=pjsin865&logNo=120108264029
위의 블로그를 가면 상세한 start.s를 볼 수 있다.
arch\arm\cpu\armv7\start.S
arch\arm\cpu\armv7\start.S 의 relocate_code procedure
하드웨어 초기화는 모두 완료되었다.
main loop는 사용자의 입력을 parsing하고, 해당 명령어를 수행한다.
최종적으로 kernel을 로딩한다.
http://www.crashcourse.ca/wiki/index.php/U-Boot_command/file_reference
위의 wiki에서 u-boot의 command확인가능하다.
dhcp는 boot image via network using DHCP/TFTP protocol
nfs는 boot image via network using NFS protocol
dcache는 enable or disable data cache
출처 : http://jianna6.tistory.com
'System Programming > Tips' 카테고리의 다른 글
linux 부팅 시 프로그램이 실행되도록 간단하게 하기 (0) | 2016.09.02 |
---|---|
리눅스 압축 / 압축 해제 (zip, tar, tar.gz, tar.bz2) (0) | 2016.09.02 |
임베디드 보드 포팅 순서 (0) | 2016.07.06 |
U-Boot & 부트로더의 이해 (0) | 2016.07.06 |
S3C2443 LCD (0) | 2016.06.27 |