Linux 장치 구동 개발 - 3.LED 켜기

3. LED 켜기


앞에서 학습한 바와 같이 우리는 4412를 어떻게 조작하는지 대체적으로 이해했다. 가장 직관적인 부분은 조작 개발판을 통해 LED등을 켜는 것이다.

도구 파일:


E4412_N.bl1.bin: 삼성에서 제공하는,bl1 코드
V310-EVT1-mkbl2.c: 삼성에서 제공하는 BL2 제작 도구(mkbl2) 원본
E4412_tzsw.bin: 삼성에서 제공하는 보안 보안 코드
sd_fusing.sh:삼성에서 제공한 BL1, BL2를SD카드에 적은 스크립트

1. 누드 코드 작성:led.S

.text
.global _start				
_start:
	LDR R0,=0x110002E0       @GPM4CON     
	LDR R1,=0x00001111   	 @GPM4_0--3        
	STR R1,[R0]		 @R1  R0,        

	LDR R0, =0x110002E4      @GPM4DAT
	LDR R1, =0x00000001	 @GPM4_0  1,LED1  ;LED2 3 4  
	STR R1,[R0]
MAIN_LOOP:			 @     
	B	MAIN_LOOP

tiny4412 개발판의, 4개의 LED가 4412 파이프 GPM4에 연결되어 있음0 - GPM43 위

2. Makefile 파일:

led.bin:led.S	
	arm-linux-gcc -c -o led.o led.S
	arm-linux-ld -Tled.lds -N led.o -o led.elf
	arm-linux-objcopy -O binary -S led.elf led.bin
	arm-linux-objdump -D -m arm led.elf > led.dis
clean:
	rm -f *.dis *.bin *.elf *.o

led.elf: 주소 정보 포함
led.bin: 순수 바이너리 파일
led.dis: 어셈블러 파일

3. 스크립트 파일 링크:

SECTIONS {
    . = 0x02023400;
    .text : { *(.text) }
    
    . = ALIGN(4);
    .rodata : {*(.rodata*)} 
    
    . = ALIGN(4);
    .data : { *(.data) }
    
    . = ALIGN(4);
    .bss : { *(.bss)  *(COMMON)}
}

여기 0x02023400은 링크 주소입니다.링크 주소는 코드의 시작 저장 주소로 코드가 있어야 할 곳, 즉 코드의 레이아웃을 결정한다.여기서 0x02023400을 지정하면 iRAM (매뉴얼 0x0202000) 에서 실행된다는 것을 표시합니다.사실 LED 코드는 매우 간단합니다. 여기서 우리는 iRAM의 공간을 사용할 수 있고 심지어 iROM 공간 0x2000 을 사용할 수 있습니다.0000, 모두 실행할 수 있습니다. 왜냐하면 우리는 어셈블리 코드이기 때문에 위치는 코드와 무관합니다!0x02023400을 사용하는 이유는 삼성이 정한 BL2의 시작 주소이기 때문이다.

4. 컴파일 및 굽기:


# make 명령을 직접 입력하면 led가 생성됩니다.bin 파일, 그럼 SD카드에 어떻게 태워넣을까요?
여기는 스크립트 파일 sd 를 사용합니다fusing.sh, 명령 사용 #
sd_fusing.sh /dev/sdb.
간단하게 말하자면 이 스크립트 파일은 사실 명령을 실행했다.
	signed_bl1_position=1
	bl2_position=17
	uboot_position=49
	tzsw_position=705

	dd iflag=dsync oflag=dsync if=./E4412_N.bl1.bin of=$1 seek=$signed_bl1_position
	dd iflag=dsync oflag=dsync if=./bl2.bin of=$1 seek=$bl2_position
	dd iflag=dsync oflag=dsync if=./led.bin of=$1 seek=$uboot_position
	dd iflag=dsync oflag=dsync if=./E4412_tzsw.bin of=$1 seek=$tzsw_position

상기 명령의 기능은 바로bl1,bl2,led 누드 코드,비밀 코드를 각각SD카드의 구역 1,17,49,705에 기록하고 우리는 led 누드 코드를 원래의 uboot(bl2를 제외하고
)의 코드, 코드를 실행하면 LED 불을 켤 수 있습니다!

좋은 웹페이지 즐겨찾기