본문 바로가기

Embedded/Kernel Porting

[Kernel Porting] H-Smart4412 커널 포팅




작업환경

1.Main OS : Windows 8.1K for x64

2.Virtual OS : Ubuntu14.04.5(VirtualBox)

3.Equipment : Hybus-Smart4412TKU


파일

https://drive.google.com/drive/folders/0B1BHFmZx9XP6aVRHOUFhSnFweUE



1. 초기설정

- 우분투 설치 후 터미널 창에서 mkdir /Smart4412

- Smart4412 디렉토리에 다운받은 Development 디렉토리 복사

- Development 디렉토리 구조  

Image : Bootloader , Kernel , Filesystem Image

● Source : Bootloader , Kernel , Filesystem Source

● Toolchain : Compiler


sudo apt-get install gcc-4.4 g++-4.4 g++-4.4-multilib gcc-4.4-multilib (C컴파일러 설치)

- sudo apt-get install u-boot-tools (부트로더 개발에 필요한 유틸리티 설치)

- Toolchain 설치

● cd Smart4412/Development/Toolchain

● sudo cp ./arm-2010q1.tgz /usr/local (압축파일 로컬로 옮기기)

● cd /usr/local

● sudo tar zxvf ./arm-2010q1.tgz (압축풀기)

● cd /usr/local/CodeSourcery/Sourcery_G++_Lite/bin/ (Toolchain 설치 경로로 이동하여 개발에 사용되는 컴파일러 정보를 확인)

● cd /Smart4412Linux/Developmnet/Toolchain/

● sudo cp ./gnueabi.tgz /opt

● cd /opt

● sudo tar zxvf ./gnueabi.tgz

● cd /opt/gnueabi/opt/ext-toolchain/bin (Toolchain 설치 경로로 이동하여 개발에 사용되는 컴파일러 정보를 확인)

● sudo apt-get install lib32z1


- 컴파일 테스트 해보기

● hello.c 프린트프 hello 하는 파일만들기

->/opt/gnueabi/opt/ext-toolchain/bin/arm-linux-gnueabihf-gcc -o hello_test hello.c

내가 설치한 arm용 gcc로 컴파일 돌리기 !

● file [파일명] 파일의 정보 arm 용인지 확인

● gcc -m32 -o hello_test hello.c 

-> file hello_test 해보면 32비트 라고 뜸!




2. Bootloader File 생성

cd /Smart4412Linux/Development/Source/bootloader/

- sudo tar zxvf ./uboot_4412_20131202.tgz

- cd uboot_4412

- make distclean (기존에 작업하였던 object , config를 삭제하고 초기화상태로 만든다)

- make smdk4412_config config (부트로더 빌드) 

( *만약 안된다면

-sudo dpkg --add-architecture i386 && sudo apt-get update

-sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0

-sudo dpkg --add-architecture i386

-echo "foreign-architecture i386" > etc/dpkg/dpkg.cfg.d/multiarch

-sudo apt-get update

-sudo apt-get install libc6:i386

-sudo apt-get install ia32-libs

)

- make (부트로더 컴파일 , 현재폴더 uboot_4412에서 make --> bl2.binu-boot.bin 파일이 생성)




3. Kernel File 생성

cd /Smart4412Linux/Development/Source/kernel/

- tar -zxvf kernel_4412_linux.tgz

- cd ./kernel_4412/drivers/net/wireless -> gedit Kconfig 부팅시 필요한 정보가 적혀있음

- sudo apt-get install libncurses5-dev

- kernel_4412 폴더로 돌아와서 make menuconfig

- 현재 폴더(kernel_4412)에서 make distclean 초기화

- cd kernel_4412/arch/arm/boot  ls 해보면 그전 작업 전부 지워진걸 알 수 있음.

- kernel_4412 폴더에서 ./build_kernel

- make (커널을 압축해서 파일 만들기 시작 20분소요)

- cd ./arch/arm/boot  (ls 해보면 zImage가 생김)




4. Filesystem File 생성

cd /Smart4412Linux/Development/Source/filesystem

chmod 777 mkfs.sh  (mkfs.sh를 실행하기 전 권한 설정이 주어져 있지 않은 경우 권한을 주도록 한다)

- sudo tar zxvf rootfs_H4412.tgz

- cd filesystem

sudo ./mkfs.sh (rootfs_ext4.img 이미지 파일 생성)




5. Kernel Porting 

  1)Tera term으로 커널 포팅(Windows 환경)

- 시리얼 통신 프로그램 설치(Tera Term)

Tera Term 설치-> (H-Smart4412장비와 시리얼 통신을 하게 해주는 프로그램다운로드 , 사이트 http://ttssh2.osdn.jp/) -> 다운로드 

-> Tera Term exe 파일 다운로드 -> USB to Serial Driver(파일명 : CDM20814_Setup) 설치 -> 제어판 모든 제어판 항목 -> 

장치관리자 포트가 추가되는지 확인 ! ex) usb serial port (com3) -> tera term 시작 -> 시리얼 (e) 선택 -> usb serial port(com3) 선택후 확인 

- 설정 시리어포트 속도 115200 후 lcd 키면서 엔터 입력 (Auto Boot 모드 상태이기 때문에 엔터를 입력하여 Stop한다)

- 파티션 나누기 fdisk -c 0 -> fastboot 입력

장치관리자 맨위에 Alcatel ADB Device 누르고 Alcatel ADB Interface 오른쪽 클릭 드라이버 소프트웨어 업데이트 클릭

   -> 컴퓨터에서 드라이버 찾기 -> OTG_USB_Driver_for_HSMART4412 

adt_bundle 파일 받기 -> 압축풀기 -> platform-tools 안에 bl2.bin , u-boot.bin zImage , rootfs_ext4.img 복사붙여넣기

platform-tools 안에서 쉬프트 + 마우스 우클릭으로  이 폴더에서 cmd 창 열기 (cmd 창에서 platform-tools 경로로 이동)

- cmd 창안에서 다음 명령어 입력

● fastboot.exe flash bootloader u-boot.bin

● fastboot.exe flash bl2 bl2.bin

● fastboot.exe flash kernel zimage

● fastboot.exe flash system rootfs_ext4.img

● fastboot.exe reboot

- 만약 fastboot.exe 실행시 fail이 뜬다면 테라텀 연결끊기 먼저 꼭 하고 fdisk -c 0 부터 다시 시작

- 부팅 완료!


  2)ubuntu에서 커널 포팅(Linux 환경)

- sudo apt-get install android-tools-fastboot 

USB를 설정해준다(FTDI FT232R USB UART [0600]을 체크해준다)

- minicom 설치 및 환경설정 방법 : https://cccding.tistory.com/58
- sudo minicom -w
lcd 키면서 엔터 입력 (Auto Boot 모드 상태이기 때문에 엔터를 입력하여 Stop한다)
- fdisk -c 0
- fastboot
- lsusb
- Google, Inc Android 1.0 [0100]을 체크해준다.


- mkdir porting(porting 디렉토리에  bl2.bin , u-boot.bin zImage , rootfs_ext4.img를 이동시킨다)

- cd porting(터미널 창을 새로 하나 연다)

● fastboot flash bootloader u-boot.bin

● fastboot flash bl2 bl2.bin

● fastboot flash kernel zimage

● fastboot flash system rootfs_ext4.img

● fastboot reboot

- 부팅 완료!