-
부트로더 응용 실습Linux/UDOO board 2020. 7. 20. 21:46반응형
타겟 보드 : UDOO
본 예제는 기본적인 부트 로드를 구성한 후의 실습입니다.
부트 로드 설치 및 설정은 아래의 포스팅을 참고 해 주세요!
https://garage-fullof-dummy.tistory.com/34
UDOO 부트로더(Bootloader) 빌드
| 부트로더 디렉토리 생성 부트로더 파일을 위한 디렉토리를 만든다 명령어 : cd udoo_linux_bsp/ mkdir u-boot ; cd u-boot samba를 이용해서 가져온 파일을 현재 디렉토리에 복사한다 명령어 : cp /srv/samba/..
garage-fullof-dummy.tistory.com
1) 작업하는 컴퓨터의 부트로더가 설치된 곳으로 파일 경로를 이동해준다
명령어 : cd emblinux/udoo_linux_bsp/u-boot/uboot-imx-2015.10.fslc-qdl
2)부트로더에 올려줄 코드를 c를 이용해서 작성해 준다
명령어 : vi common/cmd_kcci_led.c
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters#include <common.h> #include <command.h> #include <asm/io.h> #define IOMUXC_SW_MUX_CTL_PAD_SD1_DATA0 0x0200E0340 //GPIO_16 #define IOMUXC_SW_MUX_CTL_PAD_SD1_DATA1 0x020E033C //GPIO1_17 #define IOMUXC_SW_MUX_CTL_PAD_SD1_CMD 0x00E0348 //GPIO1_18 #define IOMUXC_SW_MUX_CTL_PAD_SD1_DATA2 0x020E034C //GPIO1_19 #define GPIO1_DR 0x0209C000 #define GPIO1_GDIR 0x0209C004 #define GPIO1_PSR 0x0209C008 void led_init(void) { unsigned long temp; temp =0x05; //Select signal GPIO writel(temp,IOMUXC_SW_MUX_CTL_PAD_SD1_DATA0); //GPIO1_16 writel(temp,IOMUXC_SW_MUX_CTL_PAD_SD1_DATA1); //GPIO1_17 writel(temp,IOMUXC_SW_MUX_CTL_PAD_SD1_CMD); //GPIO1_18 writel(temp,IOMUXC_SW_MUX_CTL_PAD_SD1_DATA2); //GPIO1_19 temp = 0x0f <<16; //GPIO1_IO16~IO19 Direction : Output temp =readl(GPIO1_GDIR) |temp; writel(temp, GPIO1_GDIR); temp = ~(0x0f <<16); //LED1~4 : Off temp = readl(GPIO1_DR) &temp; writel(temp,GPIO1_DR); } void led_write(unsigned long led_data) { led_data = led_data <<16; writel(led_data, GPIO1_DR); } unsigned long led_read(void) { unsigned long temp; temp = (readl(GPIO1_DR)>>16) & 0x0f; return temp; } static int do_KCCI_LED(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { unsigned long led_data; if(argc !=2) { cmd_usage(cmdtp); return 1; } printf("*LED TEST START(작성자:KSH)\n"); led_init(); led_data=simple_strtoul(argv[1],NULL,16); led_write(led_data); led_data = led_read(); printf("*LED TEST END(%s : %#04x)\n\n ",argv[0],(unsigned int)led_data); return 0; } U_BOOT_CMD( led,2,0,do_KCCI_LED, "led - kcci LED Test", "number - Input argument is only one.(led [0x00~0x0f])\n"); 간단한 코드 리뷰
3) Makefile할 때 같이 컴파일 되도록 써준다
명령어 : vi common/Makefile
**** Makefile이 여러개 있으니까 경로에 주의!!!
10행에 부트 로더에 올릴 파일의 오브젝트 명을 추가해준다
4) 타겟보드에 올릴것이기 때문에 arm용 컴파일을 해준다
명령어 : ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make
6) 컴파일로 생성된 u-boot.img 파일을 타겟보드로 nfs를 이용하여 옮겨준다(scp를 이용하는 방법도 있다!)
명령어 : cp u-boot.img /srv/nfs
명령어 : scp u-boot.img udooer@192.168.1.101:~ (scp를 이용하는 경우!)
7) 타겟 보드 터미널에서 sd카드를 퓨징한다
명령어 : sudo dd if=u-boot.img of=/dev/mmcblk0 bs=1K seek=69
8) 타겟보드를 재부팅해서 부트커멘드 모드로 진입한다
위의 사진같이 나오면 잽싸게 3...2...1.. 이내에 아무 키나 눌러서 커멘드 모드로 들어가 준다
놓쳤다면....재부팅 ^^*
9) 코드로 작성했던 명령어를 입력해서 led를 켠다
led 0x01 -> LED1
led 0x02 -> LED2
led 0x04 -> LED3
led 0x08 -> LED4
728x90'Linux > UDOO board' 카테고리의 다른 글
UDOO 커널(Kernel) 빌드 (10) 2020.07.13 UDOO 부트로더(Bootloader) 빌드 (0) 2020.07.13 UDOO 파일시스템 빌드 (0) 2020.07.13 UDOO board nfs 설치 (0) 2020.07.13 UDOO board samba 설치 (0) 2020.07.13