티스토리 뷰

Study/Linux

[Linux] buildroot 관련 잡담

생각많은 소심남 2016. 6. 2. 18:37

 지난 포스트에서 floating point 연산이 결국 libc library와 상관이 있고, application과 libc가 제대로 연결되지 않아 오류를 출력되는 것까지 확인했다.

 결국 원인을 찾았으니 이제 그걸 해결하려면 libc를 다시 build를 해서 넣는 수밖에 없다는 결론에 도달했다.

 

 그런데 여러 문제가 있었다. 사실 위 문제를 해결하는 가장 쉬운 방법은 prebuilt된 libc를 쓰면 되는 건데, 아무리 찾아봐도 soft-float을 위한 prebuilt 이미지가 하나도 없었다. 어디에선 codesourcery에서 배포하는 toolchain을 쓰면 된다길래, 가입하고 build해봐도 안되고.. 마침 server에서 지원하는 gcc cross compiler에도 버그가 있어서 libc가 제대로 build가 안됬다. 또 이를 해결하려는 gcc도 cross compile용으로 다시 빌드를 해야되고... 문제가 계속 꼬리를 무는데, 진짜 별짓을 다했는데도 안됬다..

 

 

 그러다가 buildroot 라는 엄청난(?) framework을 발견했고, 이를 이용하니까 한큐에 문제가 해결되었다.

 

 buildroot는 일종의 embedded linux porting에 있어서 거의 맥가이버 키와 같은 역할을 하는 도구인데, 간단히 얘기하자면 rootfs를 만들어준다. 즉, linux에 올라가는 file system 전체를 만들어 준다는 것인데, 간단하게 root 하위에 있는 폴더(/bin /lib /sbin /dev 등)와 그 안의 구성 파일들을 자동으로 만들어준다. 물론 busybox도 같이 만들어줌으로써 linux내에서 간단한 명령어들을 실행할 수 있게 해준다. 내가 생각한 것은 buildroot를 생성하면서 어차피 libc도 같이 빌드가 될테니 이를 사용하면 되겠다 싶었다.

 

 물론 앞에서 언급한것처럼 cross compile을 해야 되기 때문에 gcc도 새로 arm용으로 build 해야되고 머리가 복잡해지겠지만, buildroot는 그냥 사용할 gcc version과 linux kernel version만 정해주면 알아서 ftp로부터 해당 파일을 받아와 그걸 활용한다. 더 신기한 것은 해당 gcc의 patch 까지도 같이 받아와 적용한 후, 수행된다는 것이다. 난 buildroot만 실행했을 뿐인데, 여기에 필요한 binutils gcc linux-header 같은 것들을 알아서 설정하고, rootfs를 만들어준다. 또 시스템설정도 건드리는 부분이 전혀 없기 때문에 root 권한도 필요없다.

 

buildroot 홈페이지에 가보면 다음과 같이 표현되어 있다.

 

Making Embedded Linux Easy

 

 아마 개발 보드로 Linux porting을 계획하고 있는 사람한테는 정말 편한 툴이 아닐까 싶다.

댓글