2016. 1. 15. 15:53 devel/etc
beaglebone black spi driver 개발
1. android build 환경 구성
ubuntu 14.04 LTS 기준
sudo apt-get install bison g++-multilib git gperf libxml2-utils make python-networkx zlib1g-dev:i386 zip
https://source.android.com/source/initializing.html
자세한 사항은 상단 링크 참조
http://thdev.net/498
기타 한국어 참고 페이지
https://github.com/beagleboard/linux
http://icculus.org/~hendersa/android/
그대로 따라 진행하면 된다(android 4.4 kikat + 3.8 linux kernel)
왜 3.8을 쓰냐면 3.8 kernel 부터 devicetree가 적용 되어있다
만약에 다른 버전을 쓰고 싶다면 수동으로 devicetree를 적용하고 패치해야하는데 음...ㅋㅋㅋ
old version 참고(linux 3.2 kernel)
https://github.com/csimmonds/bbb-android-device-files/tree/kk4.4-sdcard
안드로이드 말고 일반 linux kernel의 경우 링크 참고
https://www.eewiki.net/display/linuxonarm/BeagleBone+Black#BeagleBoneBlack-LinuxKernel
android adb linux kernel config 참고
http://nelenkov.blogspot.kr/2013/07/building-wireless-android-device.html
1. Configure FunctionFS support in the kernel (CONFIG_USB_FUNCTIONFS=y):
Device Drivers -> USB Support -> USB Gadget Support -> USB Gadget Driver -> Function Filesystem
2. Modify the boot parameters in uEnv.txt to set the vendor and product IDs, as well as the device serial number
g_ffs.idVendor=0x18d1g_ffs.idProduct=0x4e26 g_ffs.iSerialNumber=<serial>
3. Setup the FunctionFS directory and mount it in your init.am335xevm.usb.rc file:
on fs
mkdir /dev/usb-ffs 0770 shell shell
mkdir /dev/usb-ffs/adb 0770 shell shell
mount functionfs adb /dev/usb-ffs/adb uid=2000,gid=2000
4. Delete all lines referencing /sys/class/android_usb/android0/*. (Those nodes are created by the native Android gadget driver and are not available when using FunctionFS.)
컴파일 할 때 님이 원하는게 usb gadget driver function fs 맞나요? 라고 몇 번 문의가 왔던거로 기억한다 디폴트 상태 그대로 yes
이 부분을 잘못하면 usb adb 통신이 잘 안되는 골까는 상황이 발생한다
그리고 망할놈의 virtualbox 는 될 때도 있고 안될 때도 있고 그렇다 참 지랄맞아......
슬프지만 host가 linux이길 추천한다
컴파일 시간은 굉장히 오래 걸린다
i5-3570, 4GB ram, hdd기준
repo를 통해서 aosp source를 가져오는데 1~2시간 가량 걸렸고
aosp kernel build 를 하는데 5시간 걸렸다(make -j4)
sgx driver와 함께 kernel 파일을 통합해서 이미지를 만드는데 2시간 가량 걸린 것 같다
예전에 xeon 2690 dual을 쓰던 시절이 간절히 그리운 순간이었다
여기까지 하는데 70GB 하드디스크 용량이 소요되었음
sd card를 여러 파티션으로 나누고 dd로 카피하는 부분은 용량을 어떻게 바꿀지 모르겠다
2. devicetree
참고 링크들
http://processors.wiki.ti.com/index.php/AM335x_Android_Device_Tree_Integration
http://elinux.org/BeagleBone_and_the_3.8_Kernel
http://slowbootkernelhacks.blogspot.kr/2014/03/beaglebone-linux-kernel310x-programming.html
http://www.devicetree.org/Device_Tree_Usage
컴파일 이전에 사실 devicetree를 구현하는게 맞지만 컴파일 후에 해도 괜찮다
make dtbs 해주면 dtb가 이쁘게 바로 만들어지니까
arch/arm/boot/dts/am335x-boneblack.dts
에 적당한 dtsi 파일을 만들어서 include 했다
그런데 말이다 분명 3.14 kernel 에서는 #include 가 먹혔는데 3.8에서는 / include / "spidev-bbb.dtsi" 이런식으로 써야했다
dtsi 파일 내용은 별거 없다 spidev 참고해서 만든거다
gpio는 갠적으로 필요해서 넣은거니 ocp랑 gpio는 빼도 상관없다
나중에 device driver에서 spi register 할 때 compatible 쪽에 bbbspidev를 맞춰주면 ok
dtbs 컴파일은 빠르게 끝난다
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs
아마 am335x-boneblack.dtb 파일만 부트 디렉토리와 교체해서 리붓하면 ok
dtc로 직접 컴파일 하면 일부 내역이 제외되는거 같다 make했을 때랑 다른 blob이 만들어진다(dtc 1.4.0)
dtb가 제대로 만들어졌나 궁금할 경우
dtc -I dtb am335x-boneblack.dtb -O dts -o export.dts
옵션중 -I(대문자 i 다, 망할 font)
위 명령어 구문을 사용해서 dtb를 dts로 변환해서 정확히 잘 정의되었는지 확인하기 바란다
3. 확인
/sys/devices/ocp.3/48030000.spi/spi_master/spi1/spi1.0/modalias
cat으로 확인해본다
spi:bbbspidev로 들어갔는지
만약 확인이 되었다면 devicetree가 정확히 일단 등록이 되었다고 볼 수 있으므로 하드웨어 테스트를 한다
spi d0와 d1을 전선으로 직접 1:1 연결
그리고 간단한 통신을 했을 때 tx로 보낸 command가 그대로 rx로 찍혀 나오면 ok
만약 뭔가 실패하면 음...devicetree 다시 확인해봐야지 뭐
'devel > etc' 카테고리의 다른 글
usb otg kernel config(linux usb over ethernet) (0) | 2016.01.27 |
---|---|
beaglebone black linux kernel 환경 구성 추천 (0) | 2016.01.18 |
intel software academic program (0) | 2015.12.10 |
minimal linux live (0) | 2015.12.10 |
git (0) | 2015.09.11 |