본문 바로가기

IT/Tizen

[2019 서울 하드웨어 해커톤] 2일차 : 타이젠 환경설정(SDTA7D) 및 드라이버 개발 기초

 

* 워크숍 2일차 전체 동영상 : 4시간 분량

 

- Arm M시리즈

  마이컴 == 마이크로 컨트롤러 == MCU(Micro Controller Unit)

  마이컴 = 마이크로 프로세서 + 입출력 제어 모듈 + 램 + 저장장치

  메모리 : MMU나 MPU 없이 직접 접근

  OS : FreeRTOS가 올라가는 수준

  보드 : 아두이노 혹은 오렌지보드

 

- Arm R시리즈 

  메모리 : 100~200MB 램, MPU(Memory Protection Unit)로 CPU에 내장된 메모리를 관리.

    (메모리를 파티셔닝하여 구획별로 관리하지만, 가상 메모리가 없기에 프로그램에서 직접 물리주소 관리.)

  OS : Real Time OS

  

- Arm A시리즈

  AP : Application Processor

  메모리 : MMU(Memory Management Unit)로 MPU의 모든 기능 + Virtual Memory

    1) Memory fragmentation 활용 가능

    2) 메모리 최대 크기보다 큰 앱 로딩 가능

    (참고 : https://jhkim3624.tistory.com/m/75)

 

- 퓨징 :  eMMC와 같은 플래시 메모리에 0 혹은 1을 새기는 행위.

  (참고 : https://kldp.org/node/101280)

 

- Boot  Mode Selection : Serial로 부팅하거나 외부 메모리로 부팅 가능

 

- J7 Peripheral : 타이젠에 맞게 포팅된 핀

 

- NXP : SDTA7D에서 사용하는 칩인 i.MX7의 메이커

  (참고 : https://www.nxp.com/)

 

- Nexell : Anchor 시리즈에서 사용하는 칩인 NXP3225의 메이커 

  (참고 : http://www.nexell.co.kr/)  

 

- USB Type C : 전원, USB SDB 디버그, USB Mass Storage

 

- USB OTG : Console. 115200, 8 Bits, No parity

 

- Linux GPIO Number = (GPIO_BANK - 1) * 32 + GPIO_BIT

 

- U Boot : Universal Boot. 

  CPU, Memory, Peripherals, Console 등 하드웨어 장치를 초기화하기 위한 임베디드용 부트로더(BIOS와 유사)

  OS가 부팅된 이후에는 더 이상 사용되지 않는다

 

- imx_usb_loader : USB Serial을 통해 부트로드를 보드의 SRAM으로 다운로드해주는 도구

 

- SPL : i.MX7을 위한 가장 기본적인 초기화 작업용

 

- 부팅 중에 램디스크를 사용하는 이유? https://developer.ibm.com/articles/l-initrd/

사이트 캡처

 

- DFU(Device Firmware Upgrade Utilities) : http://dfu-util.sourceforge.net/

 

- lsblk : lists information about all or the specified block devices.

  The lsblk command reads the sysfs filesystem to gather information. 

  (참고 : http://manpages.ubuntu.com/manpages/trusty/man8/lsblk.8.html)

 

- extlinux : EXTLINUX is a Syslinux variant which boots from a Linux filesystem.

  (참고 : https://wiki.syslinux.org/wiki/index.php?title=EXTLINUX)

 

- Trap : https://stackoverflow.com/questions/3149175/what-is-the-difference-between-trap-and-interrupt

 

발표자료 중
발표자료 중

 

- 플랫폼 디바이스는 언제 쓰이는지? 디바이스 트리 & 디바이스 드라이버와 함께 엮어 설명해주세요.

 

 

* 일정

 

* SDTA7D 보드 소개

- 발표자 : 시그마델타 테그놀로지 윤지원 대표

  (공식 사이트 : https://www.sigma-delta.tech)

- 발표자료 : 용량이 커서 두 개의 파일로 분할압축하였습니다.

[SDT] Seoul Hardware Hackathon.vol1.egg
10.00MB
[SDT] Seoul Hardware Hackathon.vol2.egg
9.15MB

 

발표자료 중

 

- 보드 이름 : SDTA7D(Sigma Delta Technologies Arm Coretex-A7 Dual)

- 보드 구매처 : http://www.devicemart.co.kr/goods/view?no=12220510

- 보드 외형

- 보드 사양

  ① CPU - i.MX7D

      High-performance Arm® Cortex®-A7 dual core

      Real-time processing Arm® Cortex®-M4 sub core (Free RTOS용)

  ② Memory

      512MB DDR3L (1600Mbps)

      8GB eMMC (5.0) flash memory

  ③ Low Power Consumption PMIC - PF3000

      1V35, 1V5, 1V8, 3V3 output

      Coin cell charger : RTC를 위한 코인 배터리를 충전하기 위한 목적으로 사용

      OTP memory : One Time Programmable Memory로 Ethernet의 MAC Addr.를 저장하기 위한 목적으로 사용

  ④ Secure Element (SE)

      For Key & Certification

      Includes every Secure Information

  ⑤ OS Support

      Arm Mbed Linux OS

      Tizen Platform 

  ⑥ Serial Peripherals

      UART, SPI, I2C, PWM, ADC, GPIO

      Dual CAN

      RGMII for 1Gbps Ethernet

      USB Host, USB OTG

      PCIe, SD I/O

      MIPI CSI for camera

      MIPI DSI for display

 

- 보드 외형

  USB Host & USB OTG 차이 : https://www.quora.com/What-is-the-difference-between-USB-host-VS-USB-OTG

 

- 보드 핀맵 : 확대해서 보세요.

  상단과 중단에 CSPI3_SLCK / CSPI3_MOSI / CSPI3_MISO 핀이 두 개씩 존재 : Mikroe 보드(https://www.mikroe.com/weather-click)를 지원하려는 목적

 

- 핀 번호 :   Tizen Port Map에 명시된 숫자를 사용하면 됩니다.

 

 

 

* 타이젠 드라이버 포팅하기

- 강의 : 다인시스 안효복 대표

- 강의자료

DSA5101_Tizen_DeviceDriver.pdf
9.27MB

 

 

* SDTA7D 보드에 타이젠 이미지를 플래싱하기

- 참고자료 : 

User Guide - Tizen on SDTA7D.pdf
0.43MB

 

- [이미 만들어진 이미지 사용하기] SDTA7D용 이미지 파일용 저장소 : 여기

  부트 이미지 : 다운로드

  플랫폼 이미지 : 다운로드

 

SigmaDeltaTechnologiesInc/sdta7d-images

Tizen sdta7d image repository. Contribute to SigmaDeltaTechnologiesInc/sdta7d-images development by creating an account on GitHub.

github.com

 

 

- [이미지 직접 만들기] 주요 소스 : github에서 클론하기

  U Boot : https://github.com/SigmaDeltaTechnologiesInc/u-boot.git

  Kernel : https://github.com/SigmaDeltaTechnologiesInc/linux-stable.git

  Building Block : https://github.com/SigmaDeltaTechnologiesInc/building-blocks.git

  Peripheral Bus : https://github.com/SigmaDeltaTechnologiesInc/peripheral-bus.git

  Peripheral I/O : https://github.com/SigmaDeltaTechnologiesInc/peripheral-io.git

  Systemd : https://github.com/SigmaDeltaTechnologiesInc/systemd.git

  SmartThings Plugin : https://github.com/SigmaDeltaTechnologiesInc/smartthing-plugin.git

  WiFi : https://github.com/SigmaDeltaTechnologiesInc/wlandrv-plugin-tizen-ap6335.git

  Bluetooth : https://github.com/SigmaDeltaTechnologiesInc/bluetooth-firmware-bcm.git

 

- [이미지 직접 만들기] gbs 빌드를 위한 설정 파일 : .gbsSdta7d.conf

GBS빌드.zip
0.00MB

 

- [이미지 직접 만들기] gbs로 위의 소스들을 빌드하기

$ sudo gbs -c ~/.gbsSdta7d.conf build -A armv7l --include-all

 

- [이미지 직접 만들기] 킥스타터 다운로드 : 타이젠 이미지 생성 과정에서 운영체제가 필요로 하는 질문을 자동으로 응답하게 해주는 파일

  tizen-unified_iot-boot-armv7l-sdta7d.ks : [다운로드]

더보기

# -*-mic2-options-*- -A armv7l -f loop --pack-to=@NAME@.tar.gz -*-mic2-options-*- 

 
# Do not Edit! Generated by: 
kickstarter.py 
 

lang en_US.UTF-8 
keyboard us 
timezone --utc America/Los_Angeles 
part /lib/modules --fstype="ext4" --size=50 --ondisk=mmcblk0 --active --label modules --fsoptions=defaults,noatime 


rootpw tizen  
xconfig --startxonboot 
bootloader  --timeout=3  --append="rw vga=current splash rootwait rootfstype=ext4"   --ptable=gpt --menus="install:Wipe and Install:systemd.unit=system-installer.service:test" 

desktop --autologinuser=guest   
user --name guest  --groups audio,video --password 'tizen' 

repo --name=local --baseurl=file:///home/segaon/GBS-ARTIK-ROOT/tizen_artik5/local/repos/tizen_artik5/armv7l/ --priority=1 

repo --name=unified-standard --baseurl=http://download.tizen.org/releases/milestone/tizen/unified/tizen-unified_20181024.1/repos/standard/packages/ --ssl_verify=no 

%packages 

# @ IoT Boot sdta7d 
sdta7d-linux-kernel 
sdta7d-linux-kernel-modules 
u-boot-sdta7d 
# Others 




%end 


%attachment 
/boot/u-boot/SPL 
/boot/u-boot/u-boot.img 
/boot/zImage 
/boot/sdta7d.dtb 
%end 

%post 

%end 

%post --nochroot 

%end 

%runscript 

%end

 

  tizen-unified_iot-headless-2parts-armv7l-sdta7d.ks : [다운로드]

더보기

# -*-mic2-options-*- -A armv7l -f loop --pack-to=@NAME@.tar.gz -*-mic2-options-*- 

 
# Do not Edit! Generated by: 
kickstarter.py 
 

lang C 
keyboard us 
timezone --utc America/Los_Angeles 
part / --size=1000 --ondisk mmcblk0p --fstype=ext4 --label=rootfs --extoptions="-J size=16" 
part /opt/ --size=512 --ondisk mmcblk0p --fstype=ext4 --label=system-data --extoptions="-m 0" 
part /mnt/initrd --size=7 --ondisk mmcblk0p --fstype=ext4 --label=ramdisk --extoptions="-b 1024" 
part /mnt/initrd-recovery --size=12 --ondisk mmcblk0p --fstype=ext4 --label=ramdisk-recovery --extoptions="-b 1024 -O ^has_journal" 


rootpw tizen  
xconfig --startxonboot 
bootloader  --timeout=3  --append="rw vga=current splash rootwait rootfstype=ext4"   --ptable=gpt --menus="install:Wipe and Install:systemd.unit=system-installer.service:test" 

desktop --autologinuser=guest   
user --name guest  --groups audio,video --password 'tizen' 


repo --name=local --baseurl=file:///home/segaon/GBS-ARTIK-ROOT/tizen_artik5/local/repos/tizen_artik5/armv7l/ --priority=1 

repo --name=unified-standard --baseurl=http://download.tizen.org/releases/milestone/tizen/unified/tizen-unified_20181024.1/repos/standard/packages/ --ssl_verify=no 
repo --name=base-standard --baseurl=http://download.tizen.org/releases/milestone/tizen/base/tizen-base_20180928.1/repos/standard/packages/ --ssl_verify=no 

%packages 

# @ IoT Headless Base 
building-blocks-root-Preset_iot_core 
building-blocks-sub1-domain_Feature-Recovery 
building-blocks-sub1-domain_Feature-Smartthings_App 
dbus-tools 
system-plugin-feature-namespace 
system-plugin-feature-session-bind 
# @ IoT Adaptation Sdta7d Headless 
building-blocks-sub1-Preset_boards-SDTA7D 
building-blocks-sub1-Preset_partition-2parts_ramdisk 
building-blocks-sub1-domain_Feature-Resource_manager_Headless 
building-blocks-sub1-domain_Feature-Upgrade 
building-blocks-sub2-Preset_boards-SDTA7D-Audio 
building-blocks-sub2-Preset_boards-SDTA7D-BLE 
building-blocks-sub2-Preset_boards-SDTA7D-Bluetooth 
#building-blocks-sub2-Preset_boards-SDTA7D-Display_Headless 
building-blocks-sub2-Preset_boards-SDTA7D-Wifi 
building-blocks-sub2-domain_API-AppFramework-TPK_Installation 
building-blocks-sub2-domain_API-Base-Utils 
building-blocks-sub2-domain_API-Multimedia-Player 
building-blocks-sub2-domain_API-Network-Bluetooth_Media_Audio 
building-blocks-sub2-domain_API-Network-Curl 
capi-network-wifi-manager-tool 
system-plugin-config-env-headless 
# Others 
wlandrv-plugin-tizen-ap6335 
smartthing-plugin 

%end 



%post 
#!/bin/sh 
echo "#################### generic-adaptation.post ####################" 

# fix TIVI-2291 
sed -ri "s/(^blacklist i8042.*$)/#fix from base-general.post \1/" /etc/modprobe.d/blacklist.conf 


#!/bin/sh 
echo "#################### generic-base.post ####################" 

test ! -e /opt/var && mkdir -p /opt/var 
test -d /var && cp -arf /var/* /opt/var/ 
rm -rf /var 
ln -snf opt/var /var 

test ! -e /opt/usr/home && mkdir -p /opt/usr/home 
test -d /home && cp -arf /home/* /opt/usr/home/ 
rm -rf /home 
ln -snf opt/usr/home /home 

build_ts=$(date -u +%s) 
build_date=$(date -u --date @$build_ts +%Y%m%d_%H%M%S) 
build_time=$(date -u --date @$build_ts +%H:%M:%S) 

sed -ri \ 
-e 's|@BUILD_ID[@]|tizen-unified_20181024.1|g' \ 
-e "s|@BUILD_DATE[@]|$build_date|g" \ 
-e "s|@BUILD_TIME[@]|$build_time|g" \ 
-e "s|@BUILD_TS[@]|$build_ts|g" \ 
/etc/tizen-build.conf 

# setup systemd default target for user session 
cat <<'EOF' >>/usr/lib/systemd/user/default.target 
[Unit] 
Description=User session default target 
EOF 
mkdir -p /usr/lib/systemd/user/default.target.wants 

# sdx: fix smack labels on /var/log 
chsmack -a '*' /var/log 

# create appfw dirs inside homes 
function generic_base_user_exists() { 
user=$1 
getent passwd | grep -q ^${user}: 
} 

function generic_base_user_home() { 
user=$1 
getent passwd | grep ^${user}: | cut -f6 -d':' 
} 

function generic_base_fix_user_homedir() { 
user=$1 
generic_base_user_exists $user || return 1 

homedir=$(generic_base_user_home $user) 
mkdir -p $homedir/apps_rw 
for appdir in desktop manifest dbspace; do 
mkdir -p $homedir/.applications/$appdir 
done 
find $homedir -type d -exec chsmack -a User {} \; 
chown -R $user:users $homedir 
return 0 
} 

# fix TC-320 for SDK 
. /etc/tizen-build.conf 
[ "${TZ_BUILD_WITH_EMULATOR}" == "1" ] && generic_base_fix_user_homedir developer 

# Add info.ini for system-info CAPI (TC-2047) 
/etc/make_info_file.sh 

#!/bin/sh 
echo "#################### generic-users.post ####################" 

if ! generic_base_user_exists owner; then 
        # By default GUM will create users in /opt/etc/passwd, which is 
        # additional users database suitable for end-user created accounts. 
        # However, the 'owner' user is shipped by Tizen system itself and 
        # it's its default user.  Consequently, it should always be available 
        # and thus, it should be added to /etc/passwd. 
        conf=/etc/gumd/gumd.conf 
        origf=${conf}.orig 
        mv -v $conf $origf 
        sed -e 's,^\(PASSWD_FILE\).*,\1=/etc/passwd,' -e 's,^\(SHADOW_FILE\).*,\1=/etc/shadow,' <$origf >$conf 
        gum-utils --offline --add-user --username=owner --usertype=admin --usecret=tizen 
        mv -v $origf $conf 
fi 



#!/bin/sh 

echo "############### iot-headless-base.post ################" 

######### Execute pkg_initdb if there is no pkgmgr-tool pacakge 
rpm -qa | grep pkgmgr-tool 
if [ $? != 0 ] 
then 
pkg_initdb --ro 
fi 


#!/bin/sh 
echo "#################### generic-wayland.post ####################" 


#!/bin/sh 
echo "#################### generic-middleware.post ####################" 


#!/bin/sh 
echo "#################### generic-applications.post ####################" 


#!/bin/sh 
echo "#################### generic-bluetooth.post ####################" 


#!/bin/sh 
echo "#################### generic-multimedia.post ####################" 


#!/bin/sh 
echo "#################### generic-desktop-applications.post ####################" 

# depends on generic-base functions 
function generic_desktop_applications_fix_userhome() { 
user=$1 

generic_base_user_exists $user || return 1 
homedir=$(generic_base_user_home $user) 

echo "Fix app_info.db of $user" 
chown -R $user:users $homedir/.applications/dbspace/ 
} 

# fix TC-320 for SDK 
. /etc/tizen-build.conf 
# Disable to run below line because this results in always failure, so it can be regarded as useless. 
#[ "${TZ_BUILD_WITH_EMULATOR}" == "1" ] && generic_desktop_applications_fix_userhome developer 


#!/bin/sh 
echo "#################### generic-crosswalk.post ####################" 


#!/bin/sh 
echo "############### common-crosswalk.post ################" 

# start wrt widgets preinstall 
rpm -qa | grep wrt-widget 
if [ $? = 0 ] 
then 
prepare_widgets.sh 
fi 


#!/bin/sh 
echo "############### common-license.post ################" 

LICENSE_DIR=/usr/share/licenses 
LICENSE_FILE=/usr/share/license.html 
MD5_TEMP_FILE=/usr/share/temp_license_md5 

if [[ -f $LICENSE_FILE ]]; then 
rm -f $LICENSE_FILE 
fi 

if [[ -f $MD5_TEMP_FILE ]]; then 
rm -f $MD5_TEMP_FILE 
fi 


cd $LICENSE_DIR 
LICENSE_LIST=`ls */*` 

for INPUT in $LICENSE_LIST; do 
if [[ -f $INPUT ]]; then 
PKG_NAME=`echo $INPUT|cut -d'/' -f1` 
echo `md5sum $INPUT` $PKG_NAME >> $MD5_TEMP_FILE 
fi 
done 

MD5_LIST=`cat $MD5_TEMP_FILE|awk '{print $1}'|sort -u` 

echo "" >> $LICENSE_FILE

 

echo "" >> $LICENSE_FILE 
echo "" >> $LICENSE_FILE 
echo "" >> $LICENSE_FILE

 

echo "" >> $LICENSE_FILE 
echo "" >> $LICENSE_FILE 
echo "" >> $LICENSE_FILE

 

echo "" >> $LICENSE_FILE 

rm -rf $LICENSE_DIR/* $MD5_TEMP_FILE 

#!/bin/sh 
echo "#################### generic-dbus-policychecker.post ####################" 
for f in /etc/dbus-1/system.d/*.conf; do 
echo 
echo "$0: Checking D-Bus policy file: $f" 
dbus-policychecker "$f" 
done 

#!/bin/sh 
echo "#################### generic-security.post ####################" 

if [ -e /usr/share/security-config/set_capability ]; then 
echo 'Give capabilities to daemons via set_capability from security-config package' 
/usr/share/security-config/set_capability 
fi 
if [ -e /opt/share/security-config/test/image_test.sh ]; then 
echo 'Run security-test' 
/opt/share/security-config/test/image_test.sh 
fi  

#!/bin/sh 
echo "############### common-cleanup-directory.post ################" 

# remove manuals, docs and headers 
rm -rf /usr/include 
rm -rf /usr/share/man 
rm -rf /usr/share/doc 


%end 

%post --nochroot 
####################### buildname.nochroot ####################### 
if [ -n "$IMG_NAME" ]; then 
echo "BUILD_ID=$IMG_NAME" >> $INSTALL_ROOT/etc/tizen-release 
echo "BUILD_ID=$IMG_NAME" >> $INSTALL_ROOT/etc/os-release 
echo "$IMG_NAME tizen-unified_20181024.1" >>$INSTALL_ROOT/etc/tizen-snapshot 
fi 

echo "############### backup-data.nochroot ################" 

date +'[%m/%d %H:%M:%S %Z] backup-data.nochroot nochroot post script - start' 

if [ -e $INSTALL_ROOT/usr/bin/build-backup-data.sh ]; then 
    $INSTALL_ROOT/usr/bin/build-backup-data.sh 
fi 

date +'[%m/%d %H:%M:%S %Z] backup-data.nochroot nochroot post script - end' 


%end 

%runscript 

%end

 

- [이미지 직접 만들기] MIC로 이미지를 생성하기

$ sudo mic cr loop tizen-unified_iot-boot-armv7l-sdta7d.ks --pack-to=tizen-unified_iot-boot-armv7lsdta7d.
tar.gz --logfile=mic_build.log -A armv7l
$ sudo mic cr loop tizen-unified_iot-headless-2parts-armv7l-sdta7d.ks --pack-to=tizen-unified_iotheadless-
2parts-armv7l-sdta7d.tar.gz --logfile=mic_build.log -A armv7l

  결과물 : tizen-unified_iot-boot-armv7l-sdta7d.tar.gz, tizen-unified_iot-headless-2parts-armv7l-sdta7d.tar.gz

 

- [SRAM에 부트로더 올리기] imx_usb_loader 준비하기 : SRAM에 i.MX 보드용 이미지 설치툴

$ cd ~/tools
$ git clone https://github.com/boundarydevices/imx_usb_loader
$ cd ~/tools/imx_usb_loader/
$ make

 

- [SRAM에 부트로더 올리기] USB로 부트로더를 로드하기 위해 DAP Station 점퍼를 설정하기

 

- [SRAM에 부트로더 올리기] SDTA7D 보드의 전원을 켜고, USB 상태 확인

$ lsusb | grep Freescale
Bus 00x Device 00y: ID 15a2:0076 Freescale Semiconductor, Inc

 

- [SRAM에 부트로더 올리기] 타이젠 이미지 압축 풀기

$ cd ~/Tizen-sdta7d/mic-output

$ tar zxvf tizen-unified_iot-boot-armv7l-sdta7d.tar.gz
modules.img
u-boot.img
SPL
sdta7d.dtb
zImage

$ tar zxvf tizen-unified_iot-headless-2parts-armv7l-sdta7d.tar.gz
system-data.img
rootfs.img
ramdisk.img
ramdisk-recovery.img

 

- [SRAM에 부트로더 올리기] SDTA7D 보드에 SPL 로드하기

$ sudo ~/tools/imx_usb_loader/imx_usb SPL

 

- [SRAM에 부트로더 올리기] SDTA7D 보드에 U Boot 로드하기

$ sudo ~/tools/imx_usb_loader/imx_usb u-boot.img

 

- [eMMC에 부트로더 올리기] U Boot의 환경변수 초기화하기

(U-Boot)
=> env default -f -a
=> saveenv

 

- [eMMC에 부트로더 올리기] U Boot에서 7개의 파티션을 지정하기

(U-Boot)
=> mmc partconf 0 0 7 0

배포자료 중

 

- [eMMC에 부트로더 올리기] DFU(Device Firmware Upgrade)를 이용하여 eMMC로 SPL & U-Boot를 퓨징하기

  http://dfu-util.sourceforge.net/

(U-Boot)
=> dfu 0 mmc 0

 

(Host)
$ cd ~/tizen-imx7/u-boot
$ sudo dfu-util -D SPL -a spl
$ sudo dfu-util -R -D u-boot.img -a u-boot

 

- [eMMC에 부트로더 올리기] eMMC로 부트하도록 점퍼 설정하기

 

- [eMMC에 부트로더 올리기] Reset

 

- [eMMC에 부트로더 올리기] USB 대용량 저장장치 모드 활성화하기

(U-Boot)
=> ums 0 mmc 0

 

- [eMMC에 부트로더 올리기] eMMC 파티션 만들기

(Host)
$ sudo ./mkpart.sh ${DISK}

mkpart.s_
0.00MB

 

- [eMMC에 부트로더 올리기] 호스트에서 보드의 USB 대용량 저장장치를 확인하기

$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 1 3.6G 0 disk
sdb4 8:20 1 1K 0 part
sdb2 8:18 1 128M 0 part
sdb5 8:21 1 1G 0 part
sdb3 8:19 1 2G 0 part
sdb1 8:17 1 32M 0 part
sdb6 8:22 1 410M 0 part
sda 8:0 0 160.1G 0 disk
sda2 8:2 0 4.5G 0 part
sda1 8:1 0 155.6G 0 part /

 

- [eMMC에 부트로더 올리기] 커널을 위한 환경변수 설정하기

$ export kernel_version=4.20.6-0-sdta7d
$ export DISK=/dev/sdc

 

- [eMMC에 부트로더 올리기] 부트 파티션을 마운트하기

$ sudo mount ${DISK}1 /media/hbahn/boot/

 

- [eMMC에 부트로더 올리기] extlinux.conf 설정하기

$ sudo mkdir -p /media/hbahn/boot/extlinux/
$ sudo sh -c “echo ‘label Linux ${kernel_version}’ > /media/hbahn/boot/extlinux/extlinux.conf”
$ sudo sh -c “echo ‘ kernel /boot/vmlinuz-${kernel_version}’ >> /media/hbahn/boot/extlinux/extlinux.conf”
$ sudo sh -c “echo ‘ append root=/dev/ram rw’ >> /media/hbahn/boot/extlinux/extlinux.conf”
$ sudo sh -c “echo ‘ fdtdir /boot/dtbs/${kernel_version}/’ >> /media/hbahn/boot/extlinux/extlinux.conf”
$ sudo sh -c “echo ‘ initrd /boot/ramdisk.img’ >> /media/hbahn/boot/extlinux/extlinux.conf”

 

- [eMMC에 부트로더 올리기] 커널이미지 복사하기

$ sudo mkdir -p /media/hbahn/boot/boot
$ sudo cp -v zImage /media/hbahn/boot/boot/vmlinuz-${kernel_version}

 

- [eMMC에 부트로더 올리기] 커널 디바이스 트리 바이너리 복사하기

$ sudo mkdir -p /media/hbahn/boot/boot/dtbs/${kernel_version}/
$ sudo cp sdta7d.dtb /media/hbahn/boot/boot/dtbs/${kernel_version}/

 

- [eMMC에 부트로더 올리기] 커널 모듈 복사하기

$ sudo dd if=modules.img of=${DISK}2 bs=1M

 

- [eMMC에 부트로더 올리기] 타이젠 플랫폼 이미지 복사하기

$ sudo dd if=rootfs.img of=${DISK}3 bs=1M
$ sudo dd if=system-data.img of=${DISK}5 bs=1M

 

- [eMMC에 부트로더 올리기] 램디스크 이미지 복사하기

$ sudo cp ramdisk.img /media/hbahn/boot/boot

 

 

* 해커톤 참가자들에게 배포된 이미지 중 SPI 부분만 갱신하기

- 신규 부트 바이너리 : tizen-unified_iot-boot-armv7l-sdta7d.tar.gz

- 신규 부트 바이너리의 압축을 풀면 아래와 같은 파일을 나옴.

$ tar zxvf tizen-unified_iot-boot-armv7l-sdta7d.tar.gz
modules.img 
u-boot.img 
SPL 
sdta7d.dtb 
zImage 

 

- 위에서 sdta7d.dtb와 zImage만 업데이트 해기

1. u-boot에서 USB mass storage utility 실행

=> ums 0 mmc 0

 

2. Host Linux에서 신규 boot image 복사

(1) 환경 설정

$ export kernel_version=4.20.6-0-sdta7d     
$ export DISK=/dev/sdc 

 

(2) 타깃보드 마운트(아래는 개인 환경에 따라 설정해주세요)                  

$ sudo mount ${DISK}1 /media/hbahn/boot/

 

(3) Copy Kernel Image

$ sudo cp -v zImage /media/hbahn/boot/boot/vmlinuz-${kernel_version} 

 

(4) Copy Kernel Device Tree Binaries

$ sudo cp sdta7d.dtb /media/hbahn/boot/boot/dtbs/${kernel_version}/