USB 케이블만을이용한리눅스 NFS 개발환경 (VirtualBox) 최초작성 : 2010 년 10 월 21 일 작성자 : 김정현 수정내용 2010. 10. 21. 최초작성 by 김정현 2010. 10. 24. 스크립트추가, 설명보충 by 유형목 1. VritualBox 설정 Windows 환경에서 VirtualBox 를설치한다음게스트 OS 로우분투리눅스를사용하는경우, RNDIS/Ethernet Gadget 이인식되었을때, 수동으로 USB 를연결하면해당기능을게스트 OS 인우분투리눅스에서사용할수있다. 간단히요약하자면 USB 케이블만을가지고마치 Ethernet 이연결된것처럼사용이가능하다는 뜻이다. 물론 TCP/IP 프로토콜을이용하므로별도의 IP 주소가할당된다. 하지만매번타겟보드가부팅할때마다수동으로입력하여셋팅을해야만연결이가능하므로 상당히번거롭다. 이를 VirtualBox 에서자동으로처리하도록하기위하여몇가지사전작업이 필요하다. 1) USB 필터추가 - dnw(smdk_usbdl) 우분투리눅스에서 tftpd 대신 smdk-usbdl 프로그램을사용하기위하여 VirtualBox 에서다음의 USB 필터를추가하면된다. smdk-usbdl 프로그램은 Windows 의 dnw.exe 프로그램을대신하 는유닉스 / 리눅스용프로그램이다. smdk-usbdl 프로그램을사용하려면우분투리눅스에서 libusb-dev 라는패키지를설치해주어 야한다. VirtualBox 에 USB 필터를추가하려면우선타겟보드와연결된시리얼터미널의 u-boot 콘솔입 력창에서다음과같이명령을내린다. > dnw c0008000 VirtualBox 실행후우분투리눅스로부팅하기전에, 설정 메뉴에서 USB 를선택한뒤, 빈필 터를추가하고수정을선택하여 USB 관련정보를입력한다.
2) USB filter 추가 - RNDIS/Ethernet Gadget u-boot 프롬프트에서 dnw c0008000 명령으로리눅스커널받은다음 bootm c0008000 명 령으로커널을부팅시킨다. VirtualBox 실행후게스트 OS 부팅전, 설정에서 USB 를선택한 뒤, 빈필터를추가하고수정을선택하여 USB 관련정보를입력한다.
3) Windows 드라이버설치 Windows 에서 RNDIS/Ethernet Gadget 장치를인식하면 새하드웨어검색마법사 가실행 되어드라이버를설치할지묻는다. 이때 Windows 에는 RNDIS/Ethernet Gadget 장치를사 용할필요가없으므로취소를누르면된다. VirtualBox에서 RNDIS/Ethernet Gadget 장치를사용하기위하여 "VirtualBox USB" 를설치하여야한다. RNDIS/Ethernet Gadget USB 필터를추가한가상머신이부팅된상태이고, RNDIS/Ethernet Gadget 장치가 PC에인식되었을때다음과같이 "VirtualBox USB" 를묻는데반드시설치하여야한다. 위의작업이완료되면가상머신에서 RNDIS/Ethernet Gadget 장치를사용하기위한사전작업
이완료된다. 2. 우분투리눅스환경설정 우분투리눅스에서 USB RNDIS/Ethernet Gadget 장치가인식될때, usb0 인터페이스가생성 되는데, 이를사용하기위하여 IP 주소를설정해야하며인터페이스도활성화시켜야한다. 1) udev rule 추가를통한 usb0 인터페이스자동인식 udev 에 usb0 인터페이스생성시 IP 주소할당및인터페이스를활성화하도록 rule 을추가하여 위과정을자동으로처리하도록할수있다. /etc/udev/rules.d/85-ifupdown.rules 파일이없는경우파일을생성하여아래와같이입력한다. ACTION=="remove", RUN+="/sbin/start-stop-daemon --start --background --pidfile /var/run/network/bogus --startas /sbin/ifdown -- --allow auto $env{interface}" LABEL="net_end" KERNEL=="usb0" RUN+="/etc/init.d/nfs-kernel-server restart" SUBSYSTEM=="usb", ACTION=="add", DRIVERS=="?*", KERNEL=="usb0", NAME="eth0" /etc/udev/rules.d/85-ifupdown.rules 파일이있는경우파일을생성하여아래의내용을추가한다. KERNEL=="usb0" RUN+="/etc/init.d/nfs-kernel-server restart" SUBSYSTEM=="usb", ACTION=="add", DRIVERS=="?*", KERNEL=="usb0", NAME="eth0" 위의작업이완료된후아래의명령어로 udev에추가된룰을반영하여야한다. udevadm control --reload-rules // Rule 갱신 service udev restart // udev 재시작 ( 위명령어가동작되지않을경우 ) 원하는대로동작하지않는다면과감하게리부팅시키면해결된다. 2) 인터페이스정보추가 usb0 인터페이스생성시관련정보를설정하여 usb0 네트워크환경을알맞게구성할수있다. /dev/network/interfaces 파일에아래의내용을추가한다. auto usb0 iface usb0 inet static address 192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.255
up /sbin/iptables -A POSTROUTING -t nat -o eth0 -j MASQUERADE up echo 1 > /proc/sys/net/ipv4/ip_forward down /sbin/iptables -D POSTROUTING -t nat -o eth0 -j MASQUERADE down echo 0 > /proc/sys/net/ipv4/ip_forward 위의작업이완료되면우분투리눅스에서 RNDIS/Ethernet Gadget" 장치로인식될때지정된 주소로 usb0 를자동으로생성한다. iptables 를써서 NAT 설정을하므로인터넷도사용이가능 하다. 3) u-boot 에서 dnw 명령을내렸을경우자동으로 smdk-usbdl 프로그램이동작하도록 udev rule 추가. # /etc/udev/rules.d/80-dnw.rules # USB bulk device SUBSYSTEMS=="usb", ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="1234", RUN+="/usr/sbin/smdk-usbdl -a 0xc0008000 -f /tftpboot/zimage" 3. 부트파라미터수정 u-boot 환경설정을다음과같이바꾼다. setenv bootcmd 'dnw c0008000;bootm c0008000' setenv serverip 192.168.1.1;setenv ipaddr 192.168.1.2;setenv gatewayip 192.168.1.1 setenv bootargs root=/dev/nfs rw nfsroot=192.168.1.1:/opt/rootfs-froyo ip=192.168.1.2:192.168.1.1:192.168.1.1:255.255.255.0::usb0:off init=/init console=ttysac1,115200 androidboot.console=s3c2410_serial2 위와같이처리하면별도의랜케이블없이 USB 케이블만을써서안드로이드및임베디드리눅 스용 NFS 개발환경을만들수있다. 다만유의할점은가젯드라이버이기때문에 USB 방식의 adb 를사용할수없게된다.