이 pdf 파일은 제가 Tizen 포팅을 하면서 알게된것과 절차를 pdf로 정리한 파일입니다.


※ 퍼가시거나 배포하실때 저작권자 필히 표시해주시기 바랍니다.

Tizen_on_Odroid_Porting_Guide.pdf


Posted by 시크한공돌이
,



■ 저번시간에는 Tizen에 uboot를 올리고 리눅스 커널까지 올려보는 작업을 했습니다.

- 간단하게 리뷰를 하자면 Odroid의 uboot를 올리고 Tizen용 리눅스 커널의 zImage와 dtb를 합친 zImage를 퓨징하였습니다.


■ 그렇다면 이번시간에는? 바로 타이젠용 플랫폼을 올려서 부팅을 시도해보겠습니다.

- 먼저 올릴 타이젠 플랫폼의 이미지 파일을 받아야 겠죠?? 

$ wget http://download.tizen.org/snapshots/tizen/rd-pq/tizen_20140602.4/images/RD-PQ/tizen_20140602.4_RD-PQ.tar.gz

$ tar tizen_20140602.4_RD-PQ.tar.gz

 이렇게 하면 tizen 사이트의 tizen 3.0 RD-PQ용 platform, data, ums의 이미지를 받을 수 있습니다.

$ sudo fdisk -l

 이전 시간에 배운 fdisk 명령어를 통해 SD카드의 파일 디스크립터를 확인하고 아래의 dd를 통해 이미지를 퓨징해줍니다.

$ sudo dd bs=1M if=platform.img of=/dev/sd<x>2

$ sudo dd bs=1M if=data.img of=/dev/sd<x>3

$ sudo dd bs=1M if=ums.img of=/dev/sd<x>4

 platform, data, ums는 각 2, 3, 4번 파티션에 들어가게 됩니다.

$ sync

 SD카드를 Odroid에 꼽고 부팅하게 되면?



위와 같이 Welcome to Tizen 3.0.0 (Tizen Next)! 라는 문구와 함께 타이젠이 부팅되는 것을 볼 수 있습니다.



하지만!!! 많은 에러와 DEPEND 에러가 ㅜㅜ



어디로 달려가야 할지



그래도... 



 콘솔은 뜨네요!!




 아쉽게도 HDMI 케이블을 통해서는 커널 메세지만 뜨는군요.


■ 다음은 커널 모듈을 설치해보고 2.1의 module.img 로딩 방식이 변화되었는지 알아보겠습니다.





Posted by 시크한공돌이
,

■ 지금 부터 예전 버전의 오드로이드의 U-boot를 올리고 타이젠 커널을 부팅해보겠습니다.

- 먼저 하드커널의 오드로이드의 u-boot를 올립니다.


$ wget http://www.odroid.in/mirror/old-releases/BSPs/Alpha4/unpacked/boot.tar.gz

$ tar -xvf boot.tar.gz

$ cd boot

SD 카드를 꼽고 

$ sudo fdisk -l

하면 아래와 같이 뜸

 Device Boot Start End Blocks Id System

 /dev/sd<x>1 2048 229468927 114733440 83 Linux

해당 디바이스에 uboot 퓨징

$ ./sd_fusing.sh /dev/sd<x>

$ sync

SD 카드를 오드로이드에 꼽음


이렇게 되면 기존의 u-boot가 SD카드에 올라가게 됩니다.


- 다음으로 타이젠의 리눅스 커널 3.10 버전을 받습니다.(타이젠 git을 이용하는 방법은 앞에 나와있습니다)

 $ git clone ssh://your_id@review.tizen.org:29418/platform/kernel/linux-3.10.git

 $ git checkout tizen

이렇게 하면 타이젠 git을 통해 커널 소스를 받을 수 있게 됩니다.


위의 작업 후 타이젠 커널을 빌드하고 이미지를 만들어야 합니다.

$ make tizen_odroid_defconfig

$ make zImage

$ make make ARCH=arm exynos4412-odroidx2.dtb

$ cat arch/arm/boot/zImage arch/arm/boot/dts/exynos4412-odroidx2.dtb > ./zImage


 이 작업 후 fastboot를 이용해서 zImage를 올리고 부팅을 합니다.

이 때 setenv명령어를 통해 U-boot의 boot argument들을 조금 변경 합니다.

 Odroid U-Boot 부분 : EXYNOS4412#, 리눅스 호스트 PC : $

EXYNOS4412# setenv bootargs "console=tty1 console=ttySAC1 115200n8 root=/dev/mmcblk0p2 init=/sbin/init rootfstype=ext4 rootwait rw"

EXYNOS4412# saveenv

EXYNOS4412# fastboot

$ sudo fastboot flash kernel zImage

$ sudo fastboot reboot

위의 작업을 모두 마치면 리눅스의 커널이 성공적으로 부팅 되는 것을 볼 수 있습니다.



위처럼 부팅이 완료되고 부팅 중 VFS(virtual file system)으로 root 파일 시스템을 마운트 시도하게 되고 root 파일 시스템이 없기 때문에 위의 빨간 박스같은 에러가 나게 됩니다.

 

■ 다음은 root파일시스템이 들어있는 Tizen의 플랫폼을 올려보도록 하겠습니다.




Posted by 시크한공돌이
,

■ 오드로이드 기존 커널 + 타이젠 파일 시스템 부팅 시도를 해보겠습니다.

1. 오드로이드 기본 시스템의 boot부분(u-boot+ 3.0.60 커널)에 파일시스템을 tizen 2.0으로 바꿔 올려본다.


2. 기존의 우분투 12.11, 리눅스 커널 3.0.60 버전이 올라가있는 이미지를 리더에 꽂는다.

ㄱ. sudo fdisk -l 로 디바이스가 어디에 잡혔는지 확인한다.

ㄴ. sudo dd if=/dev/sd<x>1 of=boot.img 로 부트 부분만 이미지로 벡업한다.


3. sd카드에 오드로이드용 u-boot만 올리고 fdisk -c 0 으로 4개의 파티션으로 나눠준다.

ㄱ. 파티션 나눈곳에 tizen 레퍼런스 rd-pq의 platform, data, ums를 각 2, 3, 4에 dd를 통해 복사해준다.

- ex) sudo dd if=platform.img of=/dev/sd<x>2 bs=4096 conv=notrunc


4. 기존 우분투의 boot 부분 이미지를 Tizen 이미지를 올린 sd 카드에 dd를 통해 덮어쓴다.

ㄱ. sudo dd if=boot.img of=/dev/sd<x>1 bs=4096 conv=notrunc


5. boot.scr부분을 고친다.

ㄱ. cd /media/BOOT

ㄴ. ls 를 하면 zImage, boot.scr 등 여러가지가 나온다.

- 먼저 boot.txt 와 scr을 벡업해준다.

cp boot.txt boot.txt-back

cp boot.scr boot.scr-back

ㄷ. vi나 gedit 등 주로 사용하는 텍스트 편집기로 boot.txt 파일을 연다.

- setenv bootargs 부분에 root=/dev/mmcblk0p2 rootfstype=ext4 init=/sbin/init 를 수정 및 추가한다.

- 저장하고 나온다.

ㄹ. mkimage를 통해 boot.scr를 만든다.

- sudo apt-get install uboot-mkimage 

- 없다면 위 명령어를 통해 설치 후 다음 명령어 실행

- mkimage -A arm -T script -C none -n "boot.scr for ODROID" -d boot.txt boot.scr

ㅁ. sd 카드를 오드로이드에 넣고 부팅을 시도해본다.

ㅂ. uboot 시작시 아무키나 누르고 uboot 프롬포트가 뜨면 

boot라고 입력한다.

6. 부팅 실패 하지만 파일시스템 로딩 시도를 했다.



Posted by 시크한공돌이
,

1. 서론

ㄱ. Tizen git을 통해 3.10 kernel을 받고 빌드하여 올리는 방법을 알아본다.


2. 본론

1. 타이젠 git에서 3.0 kernel 을 clone 함 

git clone ssh://kimyjin1989@review.tizen.org:29418/platform/kernel/linux-3.10.git

2. git checkout으로 tizen_2.0 브런치로 이동

git checkout tizen_2.0

3. 컴파일 중 exynos_drm.h에서 에서

vi로 .config 수정

http://forum.xda-developers.com/showthread.php?t=1748297&page=12

Solution: change CONFIG_DRM_I2C_CH7006=m to CONFIG_DRM_I2C_CH7006=n

이런식으로 시도해보겠음.


4. DRM 문제 해결 후 재 컴파일 하는데 sys/ioccom.h 파일이 없다고 뜸

오드로이드 찾아보니 툴체인이 4.6이나 4.7 이상 되어야 컴파일 된다고 댓글 달린것이 있음.


5. 위의 에러는 ARM-EABI의 버전이 낮아서 발생한 문제로 4.7로 변경하니 에러 하나와 함께 빌드 됨.

해당 에러는 다음의 그림과 같음


이 에러를 해결하기 위해 zlop 설치.

apt-get install lzop


6. 위의 문제를 해결한 후

커널을 빌드하게 되면 다음과 같이 빌드가 된다.


make trats2_defconfig

make uImage 



7. 이 이미지를 fastboot를 통해서 U-boot가 올려져있는 SD카드에 넣고 부팅하게 되면.

위와같이 Starting kernel에서 정지됨.


3. 결론

ㄱ. 커널 빌드가 되었습니다. 

ㄴ. 커널이 시작되지 않는 이유를 찾고 고치도록 하겠습니다.

Posted by 시크한공돌이
,



1. 목적

ㄱ. 먼저 u-boot를 다운받는 이유와 그 방법을 알아본다.

ㄴ. 임베디드 보드의 부팅 절차를 알아본다. 


2. 내용

ㄱ. 먼저 odroid의 git을 통해 오드로이드용 U-boot를 다운받는다.

먼저 git이 없다면 설치한다.

sudo apt-get install git 


 오드로이드용 U-boot는 다음의 git 명령어를 통해 다운을 받을 수 있다.

git clone https://github.com/hardkernel/u-boot.git


U-boot가 다운로드 되면 컴파일을 실행한다.

 cd u-boot

make distclean

make smdk4412_config

make (u-boot.bin 파일 생성)


컴파일이 완료되면 sd카드에 Fusing을 해야한다.

./mkbl2 u-boot.bin bl2.bin 14336 (bl2.bin n파일 생성)

cd sd_fuse

./sd_fusing_4412.sh /dev/sdb

(/dev/sdb는 현재 SD카드가 마운트되어 있는 장치파일로 지정 : sudo fdisk -l 명령어로 확인가능) 

sync


위의 과정이 끝난 후 SD카드를 오드로이드 X2에 넣고 실행하게 되면 u-boot 가 실행되는것을 볼 수 있다.


3. 결론

ㄱ. 위의 과정을 통해  오드로이드 SD카드에 부트로더인 u-boot를 올리는 방법을 알아보았다.

ㄴ. 이제 타이젠의 커널을 받아 빌드하고 커널 이미지를 올리는 방법을 알아보도록 한다.

Posted by 시크한공돌이
,

1. 목적(purpose)

ㄱ. 타이젠 관련 실행파일의 빌드를 위해 ARM 크로스 컴파일러를 설치한다.

(ARM toolchain install to cross compile for build of Tizen)

ㄴ. 설치한 크로스 컴파일러의 설정을 한다.

(Configuration ARM cross complie toolchain)

※ 추후 u-boot를 빌드에 64비트 실행이 존재하므로 이전 우분투를 설치할 때 64BIT 운영체제를 설치하도록 한다. (You must install 64bit OS to build u-boot. U-boot builder have 64bit execute file)


2.내용(body)

ㄱ. 툴체인 다운로드 (Toolchain Download)

a. 먼저 http://www.mentor.com/에서 IA32용 GNU/Linux ARM EABI를 받아야함.

(First, you have to download 'GNU/Linux EABI for IA32' in http://www.mentor.com/)

https://sourcery.mentor.com/GNUToolchain/release1294?lite=arm 접속(enter the link)


위와 같은 화면이 보이면 'Download Lite Edition' 클릭한다.('Download Lite Edition' click)


각 양식들을 체우고 'Get Lite!' 버튼을 클릭한다. (Fill in all of form.)


그 후 메일을 확인하면 ARM EABI를 받을 수 있는 메일이 수신되어있다. 메일을 열면 아래와 같은 주소가 담긴 메일이 보인다.(Then, you can receive a mail to download ARM EABI)


주소가 담긴 메일에서 빨간 네모박스 위치의 주소를 클릭하면 ARM의 EABI를 다운받는다.

(Click the link inside of red box to download ARM EABI)

※ 여기서 EABI란(임베디드 응용 프로그램 이진 인터페이스, embedded-application binary interface)는 임베디드 소프트웨어 프로그램을 수행하는 파일 형식, 자료형, 레지스터 사용, 스택 프레임 조직, 명령 변수를 위한 표준 변환을 정의하고 있다.

EABI를 지원하는 컴파일러는 이와 같은 또다른 컴파일러가 만든 코드와 호환되는 목적 코드를 만드므로 개발자들이 다른 컴파일러가 만들어 낸 목적 코드와 한 컴파일러로 만든 라이브러리를 연결할 수 있게 한다. 자체적인 어셈블리어 코드를 작성하는 개발자들은 EABI를 사용하여 호환 컴파일러가 만들어낸 어셈블리 코드와 상호 작용하게 할 수 있다.

일반 목적의 운영 체제에서 ABI와 EABI의 주된 차이점은 권한 명령이 응용 프로그램 코드 내에서 실행되는 점, 동적 링크가 요구되지 않는다는 점(심지어는 아예 동적 링크를 허용하지 않는 경우도 있음), 메모리 저장을 위해 더 작아진 스택 프레임 조직을 갖춘다는 점이 있다.

(An embedded-application binary interface (EABI) specifies standard conventions for file formats, data types, register usage, stack frame organization, and function parameter passing of an embedded software program.

Compilers that support the EABI create object code that is compatible with code generated by other such compilers, thus allowing developers to link libraries generated with one compiler with object code generated with a different compiler. Developers writing their own assembly language code may also use the EABI to interface with assembly generated by a compliant compiler.

The main differences of an EABI with respect to an ABI for general purpose operating systems are that privileged instructions are allowed in application code, dynamic linking is not required (sometimes it is completely disallowed), and a more compact stack frame organization is used to save memory.[4] The choice of EABI can affect performance.)


빨간 네모박스의 IA32 GNU/Linux TAR 파일을 받는다. (Download IA32 GNU/Linux TAR file inside of redbox)


다운 파일이 Downloads 폴더 안에 생성된것을 볼 수 있다.(arm-2010q1-188-arm-none-eabi-i686-pc-linux-gnu-tar.bz2)

(You can see tar file in Downloads folder. File name is arm-2010q1-188-arm-none-eabi-i686-pc-linux-gnu-tar.bz2.)


위와 같은 tar -xvf 명령어를 통해 압축을 푼다.(Extract tar file by tar -xvf command)


압축을 풀면 arm-2010q1 이라는 폴더가 생성됨을 볼 수 있다.(You can see arm-2010q1 folder after extract.)


위와 같은 cp 명령어를 통해 사용자가 원하는 폴더로 ARM EABI 폴더를 이동시킨다.(move arm-2010q1 folder to every dir where you want by cp.)


폴더가 이동되었다면 자신의 HOME 폴더의 .bashrc 파일을 수정한다. .bashrc 파일은 bash shell이 시작될 때 초기화되는 sell script들을 모아놓은 파일이다.(If folder is moved successfully, you have to edit .bashrc in your HOME folder.)


위와 같이 .bashrc에 자신의 ARM EABI 위치에 대한 경로를 추가해 준다.(Specify your ARM EABI folder PATH end of the .bashrc file.)

export ARCH=arm 

export CROSS_COMPILE=arm-none-eabi-

PATH=$PATH:(Your ARM BAEI folder path)/bin;

:wq 명령어를 통해 저장하고 복귀한다.(Return to shell bu :wq command.)


ㄴ. 위와 같은 툴체인 설치가 완료되었다면 32bit 라이브러리를 설치한다.(Install 32bit libs)

'sudo apt-get install ia32-libs' 명령어를 통해 설치하게 된다.


3.결론(conclusion)

ㄱ. 지금까지 ARM 크로스 컴파일을 위한 ARM EABI 설치를 진행해 보았다.(We installed ARM EABI for ARM cross complie)

ㄴ. 다음은 타이젠의 u-boot 소스를 받고 엑시노스 4412의 콘피규어 파일을 포팅하고 빌드해 보도록 하겠다.(We will download u-boot of Tizen and porting Exsynos4412 config file to Tizen u-boot next time)

Posted by 시크한공돌이
,

ㄱ. 목표

1. 타이젠(Tizen)을 오드로이드 x2 에 포팅할 예정입니다. 그에따라 Tizen 공식 사이트의 개발자 가이드를 기반으로 포스트를 작성합니다. 허나 현재 해보고 있는 결과 개발자 가이드를 기반으로 모두 동일하게 하였을때 실행이 안되는 부분들이 너무 많아 고쳐가면서 하도록 하겠습니다.

2. 오늘의 목표는 개발 환경 세팅하기(Setting up Development Environment) 입니다.


ㄴ. 본론

1. 다음에 대하여 Gerrit 접근을 설정한다.

- 어떻게 등록하는지

- SSH 설정을 어떻게 하는지

- Git 설정을 어떻게 하는지

1.1 연락 정보 등록하기

a. Tizen Gerrit에 로그인

- 이 부분을 실행하기 위해서는 타이젠 사이트(https://source.tizen.org/ko/user/register)를 가입하고 로그인을 하시면 됩니다.

※ 타이젠 사이트 가입 시 이름을 영문으로 하시는게 유리합니다. 이유는 Git 설정을 하실 때 Username을 설정하셔야 하는데 이 때 사이트의 이름이 들어가게 됩니다.


b. Settings 페이지 열기


- 세팅 페이지를 열고


- Contact Information 메뉴를 클릭하여 정보를 입력한다. Username과 Full Name, Email을 확인하는데 모두 기본적으로 입력되어있다. 만약, 입력이 안되어있다면 Username, Full Name은 Reload 버튼을 눌러 타이젠 기본 정보를 불러온다.

- 만약 Email 정보를 갱신할경우 해당 메일에 Verify email을 수신 확인 하여야 한다.


1.2 Gerrit 접근을 위한 SSH 설정

Gerrit에 접근하기 위한 SSH를 설정하기 위해서는 다음과 같은 절차들이 필요하다.

1. 다음과 같은 명령들에 의한 RSA 키 생성, 엔터만 눌러주면 됨.

$ ssh-keygen [-t ras] [-C ""]

Enter file in which to save the key (/home//.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

노트 : 여기서 "[-t ras] [-C ""]"는 옵션사항이다.

2. SSH 설정 파일 만들기 설정 파일 Path -> "~/.ssh/config"

- 여기서 ~/.ssh/config 이 위치에 텍스트 에디터나 GUI 에디터를 통해 SSH 설정 파일을 생성해야 한다.

$ vi ~/.ssh/config

Host tizen review.tizen.org Hostname review.tizen.org IdentityFile ~/.ssh/id_rsa User kimyjin1989 Port 29418 #The line below is optional configuration applicable to Ubuntu and openSUSE. #Add when using proxy, otherwise, skip it. #ProxyCommand nc -X5 -x : %h %p #The line below is optional configuration applicable to Fedora. #Add when using proxy, otherwise, skip it. #ProxyCommand nc --proxy-type socks4 --proxy : %h %p

- 하얀 박스의 내용을 붙여넣고 생성하게 된다.

※ 여기서 빨간 글씨와 파란 글씨를 중요하게 보아야 한다.

빨간 글씨 : Tizen 개발자 가이드에서는 tizen만 쓰여있지만 위와 같이 review.tizen.org 라고 써야지만 repo sync가 가능하다. !! repo sync는 뒷 부분의 tizen 소스 다운로드 부분에서 실행하게 된다.

파란 글씨 : 사용자의 ID, 이전의 Gerrit 사이트에서 설정한 username을 넣어준다.


3. 자신의 SSH 공개키 Gerrit에 업로드

- 먼저 자신의 SSH 공개키를 확인합니다.

$ vim ~/.ssh/id_rsa.pub

- 위와 같은 명령어를 입력하면 다음과 같은 SSH Key 값이 나오게 되고 해당 문서의 모든 내용을 복사합니다.



- 다음으로 그 복사한 Key 값을 Gerrit 사이트에 입력하여야 합니다.

- 위에서 한 번 본 적있는 부분인 gerrit 사이트의 setting 버튼을 누르게 되면 위의 그림과 같은 SSH public Key 링크를 볼 수 있습니다.

SSH Key 등록이 처음이라면 메모장 같은 화면에 밑에 Add key 등의 버튼이, 이미 등록한 경험이 있다면 위의 사진과 같은 버튼이 있을것입니다. 

- 위 처럼 나온다면 Add Key 버튼을 눌러 입력창을 띄워 값을 붙여넣기 하고 Add 버튼을 통해 저장

- 처음이라면 텍스트 박스에 키를 붙여넣기 하고 Add 버튼을 눌러 저장합니다.


3. SSH 접속 확인

$ ssh tizen

- 위의 명령어를 실행하여 아래와 같은 모습이 나오면 성공입니다.

 ****    Welcome to Gerrit Code Review    ****
   ...


1.3 Gerrit 접근을 위한 Git 정보 설정

- 앞에 Tizen 공식 사이트 회원 가입 부분에서 말씀드렸듯이 git에 사용자 정보를 설정해야합니다.

다음의 두 동작을 통해 정보를 입력하게 됩니다.

1.  자신의 이름 설정

  1. $ git config --global user.name 

아래는 예제 입니다. 자신의 Full name이 youngjin Kim 일때 | 이부분은 추후에 username인지 Full name인지 확인이 필요한 부분입니다. 다른 블로거의 사이트에서는 Full Name으로 시행하고 있어서 Full name으로 일단 보겠습니다.

  1. $ git config --global user.name "youngjin Kim"


2. 자신의 email 설정

  1. $ git config --global user.email ""

아래는 예제입니다. 자신의 Gerrit에 설정해놓은 email을 입력합니다.

  1. $ git config --global user.email "kimyjin1989@gmail.com"



ㄷ. 결론

- 여기까지 Tizen 소스를 받기 위한 기본적인 Tizen 사이트 가입, Gerrit 설정, 소스 코드 수신을 위한 SSH 설정, Git 정보 설정까지 모두 마치었습니다. 의문점은 댓글 달아주시면 제가 할 수 있는 부분까지 도와드리도록 하겠습니다.

Posted by 시크한공돌이
,

ㄱ. 목적

1. 블루투스 디바이스가 검색 가능하도록 만들기 위한 기초 지식을 공부해보자


ㄴ. 본론 

1. 블루투스가 검색 가능하기 위해서는 SDP 서비스에 등록이 되어 있어야 한다.

SDP는 연결된 블루투스 디바이스에서 어떠한 서비스가 가능하고, 그 가능한 서비스의 특징에 관한 정보를 교환하기 위한 프로토콜이다.

 SDP를 통해 블루투스 디바이스들이 LAN, 핸드폰, 팩스, 프린터 등의 서비스가 가능한지에 대한 정보를 교환하는 것이다.


2. 리눅스 에서 sdp 서비스를 등록하려면 sdp 데몬이 동작하고 있어야 하고 sdp 데몬이 동작하려면 bluetooth 데몬이 동작하고 있어야 합니다.


#ps -al | grep bluetooth 

위 명령으로 bluetooth 데몬이 실행되고 있는지 알 수 있습니다.


ㄷ. 결론

1. 블루투스 디바이스가 검색 가능하기 위해선 SDP 서비스에 등록되어 있어야 한다는 것을 알았습니다.

2. 다음 포스팅은 어떻게 SDP 데몬을 설치하고 동작시키는지 어떻게 등록 시키는지 알아보겠습니다.

Posted by 시크한공돌이
,

1. 목적

ㄱ. 리눅스 상에서 블루투스를 통한 통신을 하기 위하여 rfcomm 방식의 통신의 예를 통해 통신하여 본다.


2. 본론

ㄱ. 먼저 블루투스 통신은 크게 2가지로 나뉜다. 

a. TCP 같은 기능을 하는 RFCOMM : TCP는 65535개의 포트를 지원하지만 RFCOMM은 30개의 포트를 지원함

b. UDP와 같은 기능을 하는 L2CAP


ㄴ. 아래의 소스코드는 RFCOMM 예제이이다. RFCOMM 프로토콜은 더욱 믿을 수 있는 연결을 지원한다(TCP와 유사함)


ㄷ. 다음의 명령어를 통해 서버측 디바이스의 블루투스 address를 알아 볼 수 있다.

$ hcitool dev

Devices:
hci0 00:1F:81:03:11:22


ㄹ. RFCOMM server.c 소스


ㅁ. RFCOMM client.c 소스


3. 결론

ㄱ. 블루투스의 RFCOMM  프로토콜 통신의 예를 통해 학습하여 보았다.

Posted by 시크한공돌이
,