For ARM Platform
(Freescale i.MX6 Quad SABRE SD)
1. 목표
Freescale i.MX6 Quad SABRE SD 보드 (ARMv7a) 에 리눅스 우분투를 포팅하여 부팅을 시킨다.
2. 필요한 패키지
2.1. ‘ncurses’ package for console like GUI
$ sudo apt-get install libncurses5 libncurses5-dev
2.2. u-boot-tools for ‘mkimage’
$ sudo apt-get install u-boot-tools
2.3. minicom
$ sudo apt-get install minicom
2.4. Librasry or tool for 32bit in 64bit development environment
$ sudo apt-get install libc6-dev-i386 lib32z1 lib32ncurses5 lib32bz2-1.0
2.5. Cross Compiler (Toolchain)
$ wget -c https://www.dropbox.com/s/wuo9f2i2lde6hpl/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12.tar.gz
3. Bootloader 빌드
필요한 패키지들을 다운받은 뒤에 bootloader 의 소스폴더인 u-boot-2009.08로 들어가서 다음과같은 명령어를 차례로 입력하면 빌드가 된다.
$ make ARCH=arm CROSS_COMPILE=arm-linux- O=../u-boot_object mx6q_sabresd_config
$ make ARCH=arm CROSS_COMPILE=arm-linux- O=../u-boot_object
4. Linux kernel 빌드
리눅스 커널 소스 폴더인 linux-3.0.35 폴더내부에 들어가서 다음과 같은 명령어를 차예로 입력한다.
(도중에 찾을수없는 파일있다고 에러뜨면 직접 소스폴더에서 찾아서 오브젝트 폴더로 옴기면 해결된다.)
$ make ARCH=arm CROSS_COMPILE=arm-linux- O=../linux_kernel_object imx6_defconfig
$ make ARCH=arm CROSS_COMPILE=arm-linux- O=../linux_kernel_object
$ make uImage ARCH=arm CROSS_COMPILE=arm-linux- O=../linux_kernel_object
5. SD card 세팅
SD card를 리더기를 통해서 USB로 컴퓨터에 연결한뒤에 mount가 되어있으면 umount를 시켜주고
다음을 진행한다.
$ sudo fdisk /dev/sdb
Command (m for help): d
Selected partition 1
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-7744511, default 2048): 20480
Last sector, +sectors or +size{K,M,G} (16384-7744511, default 7744511):
Using default value 7744511
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
`$ sudo mkfs.ext4 /dev/sdb1`
$ cd <the path to folder containing u-boot.bin>
$ sudo dd if=u-boot-mx6q-sabresd.bin of=/dev/sdb bs=512 seek=2 skip=2 conv=fsync
$ cd <Linux kernel Build folder>/arch/arm/boot/
$ sudo dd if=uImage of=/dev/sdb bs=512 seek=2048 conv=fsync
6. Minicom 세팅
Mirco USB 케이블이 필요한데 그것을 보드와 PC에 연결하고 다음과같이 설정을 하면된다.
$ sudo minicom -s
# Select menu ‘Serial port setup’
# Modify ‘A - Serial Device’ such as ‘/dev/ttyUSB0’
# Modify ‘F - Hardware Flow Control’ such as ‘No’
# So, the result is..
+-----------------------------------------------------------------------+
| A - Serial Device : /dev/ttyUSB0 |
| B - Lockfile Location : /var/lock |
| C - Callin Program : |
| D - Callout Program : |
| E - Bps/Par/Bits : 115200 8N1 |
| F - Hardware Flow Control : No |
| G - Software Flow Control : No |
$ sudo minicom
# After running minicom , connect your board to PC by your microUSBcable.
# And then, power on your board.
7. U-Boot 설정
mirco USB 케이블도 연결하고 Minicom을 실행한 뒤 보드 전원버튼을 누르면 부트로더까지는 부팅이 완료된다 그때 엔터를 쳐서 다음과같이 부트로더 프롬프트로 접근하여 부트로더 환경변수 설정을 해준다.
MX6Q SABRESD U-Boot > setenv loadaddr 0x10800000
MX6Q SABRESD U-Boot > setenv bootargs_base 'setenv bootargs console=ttymxc0,115200'
MX6Q SABRESD U-Boot > setenv bootargs_mmc 'setenv bootargs ${bootargs} root=/dev/mmcblk1p1 rootwait rw video=mxcfb1:dev=ldb,LDB-XGA,if=RGB666 video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24'
MX6Q SABRESD U-Boot > setenv bootcmd_mmc 'run bootargs_base bootargs_mmc;mmc dev 2;mmc read ${loadaddr} 0x800 0x4400;bootm'
MX6Q SABRESD U-Boot > setenv bootcmd 'run bootcmd_mmc'
MX6Q SABRESD U-Boot > saveenv
MX6Q SABRESD U-Boot > run bootcmd
8. 마무리
마지막 run bootcmd 명령어를 부트로더 프롬프트에서 입력하거나 환경변수가 저장된 상태에서 재부팅을 하게 되면 정상적으로 부팅이 완료된다.
No comments:
Post a Comment