본문 바로가기

지식/Embeded

큐비트럭 커널컴파일


http://linux-sunxi.org/Cubietruck/AP6210


큐비트럭 관련 사이트 내용중에 보면 커널 3.4에서는 무선랜+블루투스 드라이버가 커널안에 포함되어 있지 않는다고 나온다. 물론 BLUEZ 나 NetManager 를 통하여 무선랜이나 블루투스를 올릴수는 있지만 확인해본결과


현재까지 블루투스 HCI가 올라오는 리눅스는 데비안, 우분투 두가지였다(큐비안은 미확인) 그래서 직접 커널 컴파일을 해보기로 하고 커널 소스에 패치 실행 후 컴파일 실행.


커널컴파일 안내페이지 http://linux-sunxi.org/Linux_Kernel


크로스컴파일 환경이 아니라 로컬에 SD카드를 마운트하여 실행함.


먼저 AP6210 관련 패치 진행


ap6210 패치 디렉토리토리 내에 2개의 패치파일을 커널 소스 디렉토리로 복사


patch -p1 < ap6210_modules.patch

patch -p1 < ap6210_defconfig.patch


 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sun7i_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig


메뉴 컨피그가 실행되면 큐비 홈페이지에서 해당 OS의 커널 컨피그 파일을 다운로드 받아 로드한다. 그리고


Device Drivers -> Power supply class support -> AXP Power Drives 옵션을 삭제


내용은 아래 참조

http://www.cubieforums.com/index.php?topic=472.100;wap2


이후에 바로 컴파일을 를 실행하면 에러가 발생한다.

에러가 발생한 소스의 문장을 살펴보면 아래와 같이 캐릭터형 배열을 선언한 부분인데

C99 문법을 벗어나진 않은것 같은데? 어쨋든 아래 문법을 수정하여 해결하였다.


커널소스/arch/arm/mach-sun7i/pm/standby/mem_printk.c

168번 줄

214번 줄

369번 줄


char 변수[]={"xxxxxxxxxxx"}; 이 부분을

char *변수={"xxxxxxxxx"}; 이런 형식으로 바꿔준다. 즉 * 를 넣고 [] 를 삭제



아래 Makefile에서 해당 옵션을 삭제(루트 최적화라는데 gcc 4.8에서만 지원하는듯)

./drivers/net/wireless/ap6210/Makefile  : fno-aggressive-loop-optimizations



SD카드에서 부팅할 이미지를 만들려면
make -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage modules


NAND에서 부팅할 이미지는 


https://romanrm.net/a10/cross-compile-kernel  참조


NAND 용 커널 컴파일 시 gcc-4.7-plugin-dev-arm-linux-gnueabifh 를 설치해줘야 arm-linux-gnueabihf-objcopy 유틸리티가 설치됨.

그리고 /usr/bin/arm-linux-gnueabihfobjcopy를 소프트 링크로 생성해야한다. (-문자 삭제한것..)

커널 패키지 생성시 objcopy 옵션을 주면 될꺼같은데 귀찮아서 그냥 소프트링크로 대체함. 


그리고 커널컴파일을 터미널에서 직접 실핼할 경우 문자 설정을 영문으로 해줘야한다. 안그러면 에러메시지가 뭔지 모른다..... 


dpkg-recofnig locales 실행 후 en.US ko.KR 확인 후 디폴트 언어를 en.US 로 설정함..

해당 터미널은 exit 이후에 언어 설정이 반영되니 exit 후에 재로그인 하고 컴파일 실행.

export ARCH=arm
export DEB_HOST_ARCH=armhf

export CONCURRENCY_LEVEL=`grep -m1 cpu\ cores /proc/cpuinfo | cut -d : -f 2`
fakeroot make-kpkg --arch arm --cross-compile arm-linux-gnueabihf- --initrd --append-to-version=-custom1 kernel_image kernel_headers

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- EXTRAVERSION=-custom1 uImage
cp arch/arm/boot/uImage ../uImage