2008년 08월 05일
OpenWrt 설치하기
OpenWrt는 다양한 Embedded 형태의 무선라우터를 지원하는 Embedded Linux의 한 종류이다.
무선라우터 기능을 가지는 Embedded Board들은 대개 제한된 프로세싱 능력과 메모리를 가지기 때문에
Linux의 모든 기능을 구현하는 것이 불가능하다. 따라서, 필요한 기능들만을 선택적으로 설치, 사용할 필요가 있다.
OpenWrt는 이러한 리눅스의 여러가지 기능들을 패키지의 형태로 제공함으로서 사용자들에 편의를 제공한다.
컴파일과정은 크게 커널컴파일과 패키지컴파일 과정으로 나눌 수 있다.
커널을 컴파일하기 위해서는, 먼저 적당한 위치를 잡아 디렉토리를 만든 후 그 디렉토리에 들어간다.
(내가 사용하는 Intel XScale 프로세서의 경우 커널버젼은 /target/linux/ixp4xx/Makefile에 설정되어 있다.)
그리고 나서, trunk를 다운로드한다. (subversion이라는 유틸리티의 사용법을 참조한다.)
>svn co https://svn.openwrt.org/openwrt/trunk ./trunk
packages를 다운로드한다.
>svn co https://svn.openwrt.org/openwrt/packages ./packages
trunk 디렉토리로 들어가 다음을 실행시킨다.
>make prepare (첫 실행시 자동으로 make kernel_menuconfig도 함께 실행)
>make kernel_menuconfig
>make menuconfig
>make
이때, 메뉴에서 원하는 보드타입과 옵션을 선택한다 (.config파일에 저장)
컴파일이 끝나면 /bin 디렉토리에 커널이미지와 기본패키지파일들이 저장된다.
만일 기본패키지외에 추가적인 패키지가 필요하면 make package/[symlinks]로
이 패키지들을 리스트에 추가시킬 수 있다. 이 후, make menuconfig에서 필요한
패키지들을 다시 선택하면 된다.
추가팁1) 만일 IMQ를 설정했는데 컴파일된 모듈을 찾을 수 없다는 에러메세지가
발생하면 kernel_menuconfig에서 IMQ를 해제하고 make으로 컴파일한 후
다시 이를 설정하면 문제없이 컴파일 할 수 있다.
추가팁2) 현 사용자가 /tmp디렉토리를 액세스할 수 없는 경우 sed등에서 컴파일
에러가 발생하는데 이경우 이 디렉토리의 모드를 바꾸어 준다.
무선라우터 기능을 가지는 Embedded Board들은 대개 제한된 프로세싱 능력과 메모리를 가지기 때문에
Linux의 모든 기능을 구현하는 것이 불가능하다. 따라서, 필요한 기능들만을 선택적으로 설치, 사용할 필요가 있다.
OpenWrt는 이러한 리눅스의 여러가지 기능들을 패키지의 형태로 제공함으로서 사용자들에 편의를 제공한다.
컴파일과정은 크게 커널컴파일과 패키지컴파일 과정으로 나눌 수 있다.
커널을 컴파일하기 위해서는, 먼저 적당한 위치를 잡아 디렉토리를 만든 후 그 디렉토리에 들어간다.
(내가 사용하는 Intel XScale 프로세서의 경우 커널버젼은 /target/linux/ixp4xx/Makefile에 설정되어 있다.)
그리고 나서, trunk를 다운로드한다. (subversion이라는 유틸리티의 사용법을 참조한다.)
>svn co https://svn.openwrt.org/openwrt/trunk ./trunk
packages를 다운로드한다.
>svn co https://svn.openwrt.org/openwrt/packages ./packages
trunk 디렉토리로 들어가 다음을 실행시킨다.
>make prepare (첫 실행시 자동으로 make kernel_menuconfig도 함께 실행)
>make kernel_menuconfig
>make menuconfig
>make
이때, 메뉴에서 원하는 보드타입과 옵션을 선택한다 (.config파일에 저장)
컴파일이 끝나면 /bin 디렉토리에 커널이미지와 기본패키지파일들이 저장된다.
만일 기본패키지외에 추가적인 패키지가 필요하면 make package/[symlinks]로
이 패키지들을 리스트에 추가시킬 수 있다. 이 후, make menuconfig에서 필요한
패키지들을 다시 선택하면 된다.
추가팁1) 만일 IMQ를 설정했는데 컴파일된 모듈을 찾을 수 없다는 에러메세지가
발생하면 kernel_menuconfig에서 IMQ를 해제하고 make으로 컴파일한 후
다시 이를 설정하면 문제없이 컴파일 할 수 있다.
추가팁2) 현 사용자가 /tmp디렉토리를 액세스할 수 없는 경우 sed등에서 컴파일
에러가 발생하는데 이경우 이 디렉토리의 모드를 바꾸어 준다.
# by | 2008/08/05 05:52 | Embedded System | 트랙백 | 덧글(4)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
우선 제보드 이름이cc9m2443js이고, s3c2443 SoC가 탑제되어있어서, menuconfig에서 s3c2443을 선택을해서 컴파일후 보드에 올려보아도 부팅이안네요.
윗글에 보드타입을 선택하라고 하셨는데요, 보드타입이 SoC 칩 말씀하시는거죠??
맞다면 저같은경우에는 어디부터 손봐야할까요?? 이건뭐 에러메세지도없고 어디부터 손봐야 할지 감이안잡혀서요.
(1) 부트로더에서 이미지를 로딩후 실행시 아무런 메세지도 없이 멈추는 경우:
OpenWrt에서 Target System(프로세서)을 Samsung S3C24xx로 선택하셨다면 부팅의 성공여부와 상관없이 부팅과정에서 메세지들이 보여져야 하는데요. 이러한 메세지들이 전혀 보이지 않는다면 이미지를 잘못된 방법으로 로드했거나 아니면 이미지 자체가 잘못 만들어졌을 확률이 높습니다. Target Images메뉴에서 이미지타입이 정확하게 설정되었는지, 이미지가 on-board flash의 정확한 위치에 쓰여졌는지 (롬모드의 경우), 이미지가 RAM의 정확한 위치에 정확한 방법으로 로딩이 되었는지, 그리고 부트로더가 zImage를 지원하는지 등을 확인해보셔야 할 것 같습니다.
(2) 메세지가 보여지지만 부팅을 완전히 끝내지 못하고 멈추거나 재부팅되는 경우:
지금 OpenWrt r17341로 보니 Target Profile(보드)에서 말씀하신 cc9m2443js과 호환되는 보드옵션이 보이지 않고 Openmoko GTA-02라는 보드만 지원하는 것으로 되어 있네요. (제가 이 보드에 대한 정보가 없어서 구체적으로 설명해드리기 힘들것 같습니다.) 결국 /target/linux/s3c24xx/에서 가지고 계신 보드의 프로파일을 새로 만드셔야 하는데요. 먼저 GTA-02라는 보드와 가지고 계신 cc9m2443js보드의 차이점을 비교하신 후 GTA-02의 프로파일을 복사해서 필요한 부분만 수정하시면 될 것 같습니다.
부트로더는 보드제작사에서지원해주는 부트로더(U-boot)를 그냥 사용했습니다. 혹시 부트로더쪽에도 수정이 필요한것일까요?
trunk폴더에서 find ./ -name *Image* 하면 이미지 파일이 몇개나오는데, bin/폴더안의 uImage파일
하고 모두 같은 것일까요? 전에 zImage를 uImage로 헤더추가, 변환시켜서 올려보아도 아무 메세지가안뜨더군요.
제가 신입이고 프리스케일 펌웨어만 3달하다가 갑자기 리눅스하게되어서 기본지식이 너무없습니다. 물어볼 사람도없구요..
제실력으로 당장 포팅하기는 무리인거 같네요. 급한것은아니니, 제가 공부를 더해봐야할 것 같습니다.
만일 u-boot가 설치된 보드로 zImage를 실행시키고 싶으시면 일단 u-boot로 롬부팅후 다시 RedBoot로 램부팅을 하고 zImage를 실행시키는 방법이 있는데요. 이 경우 RedBoot 램부팅용 이미지를 새로 만드셔야 합니다. 아니면 아예 u-boot를 삭제하고 RedBoot 롬부팅 이미지를 ROM에 쓰셔도 되는데 만일 실패하는 경우 JTAG디버거로만 이를 복구할수 있습니다. (JTAG디버거를 사용해본적이 없으시다면 이번 기회에 한번 배워보시는 것도 좋을 것 같습니다. 저는 OpenOCD를 함께 사용하고 있습니다.)