임베디드리눅스실습환경설정 (vmware Ubuntu8.10) ==== Windows XP, VMware, MEP2440 Board ==== 관련프로그램설치 1) 준비단계 실습용 CD 준비 vmware 플레이어준비및 ubuntu-8.10_vmware_default 이미지실행 vmware 다운로드위치 : http://www.vmware.com/download/player/ 리눅스이미지구축 (ubuntu8.10) - 사용자권한을 root 사용자로변경한다. root@mdsedu-desktop:/# su password : mdsedu 텔넷루트로그인방법 telnet 서비스는루트 (root) 로의로그인을기본적으로막고있으나, 허용하고자한다면아래와같이 /etc/securetty 파일을삭제하거나다른파일명으로변경하면된다. 보안상매우취약하므로루트 (root) 로의로그인설정에주의를요한다. # mv /etc/securetty /etc/securetty.old 우분투 root 계정로그인하기초기시스템관리자로 root 계정은만들어져있으나패스워드설정은되어있지않다. 1. 터미널에서 'sudo passwd root' 입력 2. 패스워드물으면제계정암호 ( 처음에만들때썼던거 ) 입력 3. 새로운패스워드를입력 4. su root로루트권한을얻음. 5. 시스템-관리-로그인창-보안에서로컬시스템관리자로그인허용에 V 표시를한다. 6. root 로그인할때언어설정도한글로바꾼다. 7. 터미널창에서 root 계정켜기 sudo s CD디렉토리의 utilities\tera_term-win\ 의 setup을수행하여 Tera Term 설치 - Setup>Serial Port> COM1, 115200, 8bit, none - Setup>Save Setup - CD 디렉토리의 utilities\putty\putty.exe 의이용 (Option) - Session: vmware 리눅스호스트 IP 넣기, 세션명과저장하기 - Bell: None - Appearance: Font 바꾸기 Fixedsys 12 - Translation: 한글을표시하기위해 UTF-8형식으로사용 - Colours: ANSI 색상을적절하게설정
- 모든설정후다시 Session 에서 Save 버튼을누르고저장 - 네트워크설정및패키지설치 1. 사용자권한을 root 사용자로변경한다. root@mdsedu-desktop:/# sudo passwd root Enter new UNIX password: 2. /etc/network/interface 파일을수정하여 IP Address 를설정한다. root@mdsedu-desktop:/# vim /etc/network/interfaces auto lo iface lo inet loopback # 정적세팅요령 auto eth0 iface eth0 inet static address 192.168.10.3 netmask 255.255.255.0 network 192.168.10.0 broadcast 192.168.10.255 gateway 192.168.10.1 # 동적세팅요령 auto eth0 iface eth0 inet dhcp 3. 설정한이더넷인터페이스를활성화시킨다. root@mdsedu-desktop:/# /etc/init.d/networking restart
TFTP 설정 4. /etc/inetd.conf 파일에서 tftp 디렉터리명을 /tftpboot 로수정한다. root@mdsedu-desktop:~# vim /etc/inetd.conf tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /srv/tftp tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /tftpboot 5. /tftpboot 디렉터리를생성하고, 접근권한을변경한다. root@mdsedu-desktop:~# mkdir /tftpboot root@mdsedu-desktop:~# chmod 777 /tftpboot 6. 데몬을재시작시킨다. root@mdsedu-desktop:~# /etc/init.d/openbsd-inetd restart 7. /tftpboot 디렉터리에파일을생성하고아무내용이나기록한후, tftp 가잘동작하는지확인한다. root@mdsedu-desktop:~# vim /tftpboot/aa.txt root@mdsedu-desktop:~# tftp localhost tftp> get aa.txt Received 13 bytes in 0.0 seconds Note Target 보드와의통신테스트도수행하여동작을확인한다. 8. Kernel 이미지파일을 /tftpboot 디렉터리로복사한다. root@mdsedu-desktop:~# cp uimage-mep2440 /tftpboot
NFS 설정 9. Cross Toolchain 과루트파일시스템을 /opt 디렉터리에압축을해제한다. root@mdsedu-desktop:/# cd /opt/ root@mdsedu-desktop:/opt# tar xfz 4.2.4-arm-toochain_and_rootfs.tar.gz 10. /etc/exports 파일에 nfs 로마운트할디렉터리설정을추가한다. root@mdsedu-desktop:~# vim /etc/exports /opt/4.2.4-arm/arm-generic-linux-gnu/sys-root *(rw,sync,no_root_squash,no_all_squash) 11. nfs 데몬을재시작한다. root@mdsedu-desktop:~# /etc/init.d/nfs-kernel-server restart * Stopping NFS kernel daemon...done. * Unexporting directories for NFS kernel daemon......done. * Exporting directories for NFS kernel daemon... exportfs: /etc/exports [2]: Neither 'subtree_check' or 'no_subtree_check' specified for export "*:/opt/rootfs". Assuming default behaviour ('no_subtree_check'). NOTE: this default has changed since nfs-utils version 1.0.x...done. * Starting NFS kernel daemon...done. 12. Target 보드에 nfs 부팅설정을하고, 보드부팅을확인한다.
Cross Toolchain Path 지정 13. /root/.bashrc 파일에 Cross Toolchain path 설정을추가한다. root@mdsedu-desktop:~# vim.bashrc # cross toolchain path export PATH=/opt/4.2.4-arm/bin:$PATH Note root 계정이아닌일반계정의경우에는사용자계정디렉터리의.bashrc 파일에추가하면된다. 만약 사용자계정이 mdsedu 라면 /home/mdsedu/.bashrc 파일을수정하면된다. 14. logout 후에다시 login 하여 path 를적용시킨다. 15. Cross Toolchain 버전정보를확인한다. root@mdsedu-desktop:~# arm-generic-linux-gnu-gcc -v Figure 2-1 Cross Toolchain Version Information
Samba 설정 (vmware 공유폴더를사용시에는 ' 스킵 ') 16. /etc/samba/smb.conf 파일을다음과같이수정한다. ( 미리설정된파일을복사해서이용해도된다.) root@mdsedu-desktop:~# vim /etc/samba/smb.conf workgroup = WORKGROUP 네트워크그룹명 guest ok = yes guest account = root [root] comment = root path = / writable = yes browseable = yes guest ok = yes 17. samba 서비스를재시작시킨다. root@mdsedu-desktop:~# service samba restart * Stopping Samba daemons...done. * Starting Samba daemons...done. 18. Windows 탐색기에서 samba 서버를연결한다. ( 도구 네트워크드라이브연결 ) \\192.168.10.3 Figure 2-2 Connect of Samba Server
19. Windows 탐색기에서 samba 서버연결을확인한다. Figure 2-3 Connected of Samba Server u-boot 의설정 2) u-boot 를이용한다운로드 printenv 환경확인 set ipaddr 192.168.0.3 타겟보드의 IP 설정 set serverip 192.168.0.2 호스트 IP의설정 set gatewayip 192.168.0.1 gateway IP 주소 set netmask 255.255.255.0 Netmask 값 set bootcmd 'tftpboot 32000000 uimage-mep2440; bootm 32000000' set bootargs 'root=/dev/nfs rw nfsroot=192.168.0.2:/opt/4.2.4-arm/arm-generic-linux-gnu/sys-root ip=192.168.0.3:192.168.0.2:192.168.0.1:255.255.255.0::eth0:off netmask=255.255.255.0 mem=49m console=ttysac0,115200n81' u-boot 매개변수의인자전달하기 save Flash 에환경설정기록하기 위의 u-boot 환경설정후타겟보드를껏다켜면다운로드가된다. 매개변수쓰기 : set bootargs 'root=/dev/nfs rw nfsroot= 호스트 IP:NFS 로사용할 _ 루트 _ 디렉토리 ip= 타겟 IP: 호스트 IP: 게이트웨이 IP: 넷마스크 ::eth0:off netmask= 넷마스크 mem =49M console= 시리얼디바이스명, 115200n81' vmware 가 bridged 로설정되어있는경우같은네트워크 ID 내에있어야한다.
3) hello world 프로그램컴파일해보기 Host Shell -- cd /work/rootfs_nfs/project vi hello.c arm-linux-gcc hello.c o hello_arm Target Shell -- cd /project./hello_arm 부트로더및커널컴파일 임베디드시스템개발시필요한경우부트로더나커널을수정하여직접컴파일하도록한다. 4) 커널소스및 u-boot 소스풀기 # tar -xjf /work/linux/linux-2.6.21.st_fin.tar.gz # tar -xjf /work/bootloader/u-boot-1.3.3.st_fin.tar.gz 압축해제후커널컴파일및 u-boot 등을수정할수있다. 5) u-boot 1.3.3 컴파일 BSP로제공된 u-boot 1.3.3버전은 arm-generic-linux-gnu-gcc 4.2.4버전에서컴파일된다. NOR flash 부팅으로컴파일하기 make distclean make mep2440_config Makefile 규칙 make u-boot 헤더를커널이미지에붙이려면컴파일후 mkimage를 /usr/bin에복사해놓는다. - uimage 를만들기위해필요하다. cp tools/mkimage /usr/bin 6) 커널컴파일 BSP 로제공된포팅되어미리준비된 rebis 용커널을사용할수있다. cd /work/linux/linux-2.6.21.st_fin make distclean make mep2440_defconfig (make menuconfig 관련메뉴설정 ) make uimage 커널이컴파일되어 mkimage 유틸리티에의해이미지에 u-boot 헤더를포함한다. cp./arch/arm/boot/uimage /tftpboot/uimage-new 새버전의커널을 tftpboot 디렉터리에복사 이후부트커맨드를수정하여새커널을테스트할수있다. Target u-boot Prompt ----------- set bootcmd 'tftp 32000000 uimage-new; bootm 32000000'
커널분석 커널소스코드를탐색하거나심볼등의정보를찾도록한다. 7) 개발자를위한 vi 환경설정 ( ~/.vimrc 파일의편집 ) ~/.vimrc 에다음줄을추가한다. syntax on set fileencodings=ucs-bom,utf-8,euc-kr set nu 8) grep, find 의활용 grep -rn task_struct * more - r: 하위디렉토리까지검색, n: 발견된라인위치출력, i: 대소문자구분없이 find./ -name *.[ch] -print xargs grep task_struct - 9) ctags 의활용 tags 데이터베이스를사용하여원하는심볼을쉽게탐색할수있다. 태그생성 : ctags -R 태그탐색으로 vim 시작하기 vim -t task_struct vim 내부에서소스의탐색 - 이동 : ctrl + ], - 되돌아오기 : ctrl + t - 첫번째태그탐색 : :ta task_struct - 목록의태그탐색 : :ts schedule
1. 리눅스디렉토리구조 2. 리눅스커널아키텍쳐
3. VIM 의단축키요약 번호 키보드 사용 1 ^F 한화면앞으로이동 2 ^B 한화면뒤로이동 3 a 커서오른쪽에문자삽입 4 i 커서왼쪽에문자삽입 5 dd 행잘라내기 6 :set nu 행번호표시 7 G 파일의마지막행으로가기 8 12G 파일의 12번째행으로가기 9 yy 행복사 10 p 행삽입 11 /string/ string탐색 12 n string의 FORWARD 탐색 13 N string의 BACKWARD 탐색 14 v 블럭설정 15 y 복사 16 d 오리기 17 p 붙이기 18 0( 숫자 ) 커서홈 (HOME) 19 $ 커서끝 (END) 20 w 커서단어단위이동 21 %s/pattern/replace/g 모든줄의치환 24 h,j,k,l 좌, 하, 상, 우커서이동 25 u 마지막명령취소
4. 리눅스커널소스의구조 5. 리눅스커널로드단계
6. 프로세스상태도