기본 Makefile 아래와 같으며, Makefile과 Rules.make를 확인하면 환경변수와 모듈 Make방법을 알수있다.
http://processors.wiki.ti.com/index.php/Processor_SDK_Linux_Getting_Started_Guide
1.1 Makefile 수정
- 설정이유
Main Makefile에서 빌드를 하면 원래 초기 설정값으로만 된다.
물론 이를 하기전에 TI에서 권고한 setup.sh를 이용하여 설정을 기본으로 해 놓아야 겠다.
- AM335x Rule.make
$ cd ~/am335x/ti-processor-sdk-linux-am335x-evm-03.02.00.05 $ vi Rules.make // 아래 설정 비교 및 수정 #platform PLATFORM=am335x-evm #defconfig DEFCONFIG=tisdk_am335x-evm_defconfig #Architecture ARCH=armv7-a #u-boot machine UBOOT_MACHINE=am335x_evm_config #Points to the root of the TI SDK export TI_SDK_PATH=/home/jhlee/am335x/ti-processor-sdk-linux-am335x-evm-03.02.00.05 #root of the target file system for installing applications DESTDIR=/home/jhlee/am335x/ti-processor-sdk-linux-am335x-evm-03.02.00.05/targetNFS #Points to the root of the Linux libraries and headers matching the #demo file system. export LINUX_DEVKIT_PATH=$(TI_SDK_PATH)/linux-devkit #Cross compiler prefix export CROSS_COMPILE=$(LINUX_DEVKIT_PATH)/sysroots/x86_64-arago-linux/usr/bin/arm-linux-gnueabihf- #Default CC value to be used when cross compiling. This is so that the #GNU Make default of "cc" is not used to point to the host compiler export CC=$(CROSS_COMPILE)gcc #Location of environment-setup file export ENV_SETUP=$(LINUX_DEVKIT_PATH)/environment-setup #The directory that points to the SDK kernel source tree LINUXKERNEL_INSTALL_DIR=$(TI_SDK_PATH)/board-support/linux-4.4.32+gitAUTOINC+adde2ca9f8-gadde2ca9f8 CFLAGS= -march=armv7-a -marm -mfpu=neon -mfloat-abi=hard #Strip modules when installing to conserve disk space INSTALL_MOD_STRIP=1 SDK_PATH_TARGET=$(TI_SDK_PATH)/linux-devkit/sysroots/armv7ahf-neon-linux-gnueabi/ # Set EXEC_DIR to install example binaries EXEC_DIR=/home/jhlee/am335x/ti-processor-sdk-linux-am335x-evm-03.02.00.05/targetNFS/home/root/am335x-evm MAKE_JOBS=1
- U-BOOT or KERNEL의 설정을 변경시 아래와 같이 변경
$ vi Makefile //본인이 원하는 곳만 수정해서 쓰자 # Kernel build targets linux: linux-dtbs @echo ================================= @echo Building the Linux Kernel @echo ================================= # $(MAKE) -C $(LINUXKERNEL_INSTALL_DIR) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) $(DEFCONFIG) // Kernel config 설정 $(MAKE) -j $(MAKE_JOBS) -C $(LINUXKERNEL_INSTALL_DIR) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) zImage $(MAKE) -j $(MAKE_JOBS) -C $(LINUXKERNEL_INSTALL_DIR) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) modules linux_install: linux-dtbs_install @echo =================================== @echo Installing the Linux Kernel @echo =================================== @if [ ! -d $(DESTDIR) ] ; then \ echo "The extracted target filesystem directory doesn't exist."; \ echo "Please run setup.sh in the SDK's root directory and then try again."; \ exit 1; \ fi install -d $(DESTDIR)/boot install $(LINUXKERNEL_INSTALL_DIR)/arch/arm/boot/zImage $(DESTDIR)/boot install $(LINUXKERNEL_INSTALL_DIR)/vmlinux $(DESTDIR)/boot install $(LINUXKERNEL_INSTALL_DIR)/System.map $(DESTDIR)/boot $(MAKE) -C $(LINUXKERNEL_INSTALL_DIR) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) INSTALL_MOD_PATH=$(DESTDIR) INSTALL_MOD_STRIP=$(INSTALL_MOD_STRIP) modules_install ..... linux-dtbs_install: @echo ======================================= @echo Installing the Linux Kernel DTBs @echo ======================================= @if [ ! -d $(DESTDIR) ] ; then \ echo "The extracted target filesystem directory doesn't exist."; \ echo "Please run setup.sh in the SDK's root directory and then try again."; \ exit 1; \ fi install -d $(DESTDIR)/boot @cp -f $(LINUXKERNEL_INSTALL_DIR)/arch/arm/boot/dts/*.dtb $(DESTDIR)/boot/ # Kernel DTB build targets linux-dtbs: @echo ===================================== @echo Building the Linux Kernel DTBs @echo ===================================== # $(MAKE) -C $(LINUXKERNEL_INSTALL_DIR) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) $(DEFCONFIG) // Kernel config 설정 $(MAKE) -j $(MAKE_JOBS) -C $(LINUXKERNEL_INSTALL_DIR) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) am335x-evm.dtb am335x-evmsk.dtb am335x-bone.dtb am335x-boneblack.dtb am335x-bonegreen.dtb am335x-icev2.dtb am335x-boneblack-iot-cape.dtb # u-boot build targets u-boot-spl: u-boot u-boot-spl_clean: u-boot_clean u-boot-spl_install: u-boot_install u-boot: linux-dtbs @echo =================================== @echo Building U-boot @echo =================================== # $(MAKE) -j $(MAKE_JOBS) -C $(TI_SDK_PATH)/board-support/u-boot-* CROSS_COMPILE=$(CROSS_COMPILE) $(UBOOT_MACHINE) // uboot config 설정 $(MAKE) -j $(MAKE_JOBS) -C $(TI_SDK_PATH)/board-support/u-boot-* CROSS_COMPILE=$(CROSS_COMPILE) DTC=$(LINUXKERNEL_INSTALL_DIR)/scripts/dtc/dtc ....
- backup board-support
$ cd board-support $ mkdir backup $ cp -a u-boot-* backup/ $ cp -a linux-* backup/ $ cp -a prebuilt-images backup/
- change linux config
$ cd board-support/linux* $ make ARCH=arm menuconfig // 설정변경 $ cd ../.. $ make linux $ sudo make linux_install
- change u-boot config
$ cd board-support/u-boot* $ make ARCH=arm menuconfig // 설정변경 $ cd ../.. $ make u-boot-spl
위와 같이 설정 한 후 board-support에서 직접 설정을 하고 빌드를 하자.
2. How To Build SDK
http://processors.wiki.ti.com/index.php/AM335x_Starter_Kit
2.1 기본 빌드
$ make all // rebuilds all components in the SDK 전체 모듈 빌드 , example-applications, modules, $ make linux // configures and builds the kernel KERNEL만 빌드 $ make linux_install // kernel 과 module , dtb 를 filesystem 에 저장 $ make u-boot-spl // builds u-boot and u-boot-spl Boot Loader 빌드 , 내가 설정한 config는 적용되지가 않는다.(주의)
위와 같이 빌드를 하면 board-support 의 uboot 및 kernel 빌드된 것을 기본설정으로 확인가능하다.
Makefile 파일을 보면, u-boot-spl은 u-boot을 포함을하고, MLO을 생성을 하고,
linux-dtbs (device tree) 관련부분도 설정을 하지만, UBOOT_MACHINE으로 매번보드를 설정하기에, 여기서 빌드를 하면, Config 수정된것이 적용이 되지 않는다.
** 적용하고 싶다면, UBOOT_MACHINE 부분을 막거나, 직접 빌드하자.
2.2 How To make SD Disk Image
현재 SD Image를 만들기 위해서 Virtual Box의 SD Disk 용 VDI를 추가하여 넣는다.
가장 일반적인 방법이며, 사용하기도 쉽다.
- Virtual Box SD DISK-VDI 추가 및 관리
SD-DISK VDI방식으로 하는것이 편하여, 아래와 같이 Image로 함.
- SD DISK VDI에 SD-Boot Image 만들기
본인도 처음 이 Version 이었지만, 도중 변경이 되어 script 의 제시하는 내용을 자세히 보자.
http://processors.wiki.ti.com/index.php/Processor_SDK_Linux_create_SD_card_script
SD script Q&A
https://e2e.ti.com/support/embedded/linux/f/354/t/221602
$ sudo/bin/create-sdcard.sh //1. /dev/sdx device 선택 ( size를 보면 대충 짐작이 갈것이다) # major minor size name 1: 8 16 31457280 sdb 2: 8 32 31457280 sdc 3: 8 48 4194304 sdd ** Enter Device Number or n to exit: //2. 이 기반으로 Partitions을 만들며, 2개로 진행하면 쉽게 Image를 만든다. //2-1 Partion 2개 선택시 아래와 같이 진행된다. pre-built 만듦 (board-support/prebuilt-images 에서 찾아 만들게 됨) ################################################################################ Choose file path to install from 1 ) Install pre-built images from SDK 2 ) Enter in custom boot and rootfs file paths ################################################################################ //2-2. Partition 3개로 했을 경우 아래와 같이 파일을 찾으며, 이거 기준으로 각각 Partition 별로 만든다. Enter path where SD card tarballs were downloaded : - boot_partition.tar.gz - rootfs_partition.tar.gz - start_here_partition.tar.gz // 진행사항은 아래의 링크를 참조
- /dev/sdx에 만들어진 것을 Image로 추출
$ cd /media/sf_SHARED $ sudo cat /dev/sdc > sdcard.img or $ sudo dd if=/dev/sdc of=./sdcard.img
Image를 가지고 Window에서 Win32DiskImager.exe 로 Write 하기
- Win32DiskImager.exe 사용법
2.3 AM335x
현재 사용중은 EVM-SK이며, Start Kit 이지만, 배포된 SDK는 보통 EVM기준으로 배포하는 것 같다.
아래와 같이 지원이 되며, Linux 도 다시 들어가면, 또 나누어진다.
- Linux : 현재 확인중
- Android : 지원되는 것을 확인하였다.
- StarterWare: No-OS version 이라고 하며, free package라는데, 아직 사용해보지 못했다.
http://processors.wiki.ti.com/index.php/AM335x_Starter_Kit
StarterWare 인경우 위와 다르게 Flashing 하는 것 같다.
http://processors.wiki.ti.com/index.php/AM335X_StarterWare_Booting_And_Flashing
아래 Version Linux SDK를 설치 할 경우이며, 기본사항들을 살펴보자.
- prebuilt-Images 확인
- MLO-am335x-evm : MLO인 경우 EVM으로 구성됨 현재 TI가 AM335x를 기본 EVM은 2가지 Type
- u-boot-am335x-evm: 역시 위와 동일
- zImage-am335x-evm: 기본 EVM이며, dtb 파일을 포함하고 있을 것이며, 압축되어있다.
$ cd ~/am335x/ti-processor-sdk-linux-am335x-evm-03.02.00.05 $ cd board-support $ cd prebuilt-images $ ls MLO-am335x-evm am335x-boneblack-iot-cape.dtb am335x-bonegreen.dtb am335x-evmsk.dtb u-boot-am335x-evm.img zImage-am335x-evm.bin am335x-bone.dtb am335x-boneblack.dtb am335x-evm.dtb am335x-icev2.dtb u-boot-spl.bin-am335x-evm
- MLO 설정 확인 및 U-Boot 설정확인
$ cd ~/am335x/ti-processor-sdk-linux-am335x-evm-03.02.00.05 $ cd board-support/u-boot* $ ls include/configs // board-config 지원확인 $ vi .config // 현재 설정된 board board config 확인 $ make ARCH=arm menuconfig
http://processors.wiki.ti.com/index.php/Linux_Core_U-Boot_User's_Guide
http://processors.wiki.ti.com/index.php/AM335x_U-Boot_User's_Guide