- Virtual Box 설정
https://ahyuo79.blogspot.com/2013/12/virtualbox.html
https://ahyuo79.blogspot.com/search/label/Tool-Virtual%20Box
- Download Image (Ubuntu Desktop 12.04)
- APT 명령사용법
https://ahyuo79.blogspot.com/2015/07/ubuntu.html
1.1 SSH Server 설정
아래와 같이 SSH Server 와 Vim을 설치한다.
$ dpkg -l |grep ssh // ssh 관련부분이 설치되어있는지 확인 $ sudo apt-get install openssh-server $ sudo apt-get install vim // vim 방향키 문제가 있어 다시 설치
이미 SSH 설치 와 기본 Upgrade 및 기본 설정을 완료한다.
그리고, 네트워크 설정을 완료한다.
1.2 GIT 관련 기본설정
repo는 git 관련부분 참고
- GIT 설치
$ sudo apt-get install git
- GIT 설정 및 Github 이용
$ echo "# ahyuo.github.io" >> README.md // README.md 문서 작성 (Github 문서) $ git init // Git 초기화 .git 생성 $ git add README.md // Index 에 README.md 문서 추가 $ git add *.c // Index 에 본인 소스 추가 $ git config --global user.email "you@example.com" // Github 설정 $ git commit -m "first commit" // Local Repository 에 commit 하고 Label
- Git를 이용하여 Remote에 Push
// Github에서 이미 Remote Repository를 생성 $ git remote add origin https://github.com/JeonghunLee/ahyuo.github.io.git // Remote Repository 등록 $ git push -u origin master // Local Repository 와 Remote Repository Sync Username for 'https://github.com': Password for 'https://xxxxx@github.com':
https://ahyuo79.blogspot.com/2014/07/git.html
https://ahyuo79.blogspot.com/2014/07/git-for-window_20.html
2. SDK/BSP에 필요 Package 설치
UBoot 및 Kernel 생성시 필요한 Package 그리고, 64bit용 OS를 사용할 경우 필요한 Package
2.1 U-Boot 관련 Tools 설치
$ dpkg -l | grep uboot-mkimage $ sudo apt-get install uboot-mkimage // build 시 문제 발생 $ sudo apt-get install u-boot-tools // uboot-mkimage 요즘 이 package로 대체 $ sudo apt-get install xinetd tftpd nfs-kernel-server minicom build-essential libncurses5-dev uboot-mkimage autoconf automake
2.2 Tool Chain 설치 (Cross Compiler)
기본적으로 칩제조사에서 제공을 하지만 없을 경우, 아래와 같은 사이트에서 원하는
개발환경을 갖춘다.
http://elinux.org/Toolchains
기본구성은 binutils과 gcc , 기본 library 및 추가 library들로 구성이 되며,
과거처럼 소스를 받아 빌드해서 만들지 않기에 아래의 사이트에서 Prebuilt toolchain을 down 받아 설치하면된다.
- Prebuilt toolchains
https://www.mentor.com/embedded-software/codesourcery
* Linaro version
https://wiki.linaro.org/WorkingGroups/ToolChain
- GCC 관련 매뉴얼
빌드 옵션 및 새로운 기능확인
설치전 필요한 패키지들 아래의 사이트에서 각 OS에 맞게 확인하고 먼저 설치하자.
$sudo apt-get install ia32-libs libgnomevfs2-0:i386 liborbit2:i386 libjpeg62:i386
** libgnomevfs2-0:i386 liborbit2:i386 ( CCS V6.0 이상 경우)
Ubuntu Version 별로 설치 방법이 다르기때문에, 아래의 사이트를 반드시 참조를 하자.
- Sitrara SDK
- Ubuntu의 Question
3. DHCP Server 설치 및 설정
나의 경우는 DHCP Server가 필요가 없고, 대신 공유기에서 DHCP를 설정하여 사용하기 때문에 이부분은 옵션
$ sudo apt-get install isc-dhcp-server $ sudo vi /etc/default/isc-dhcp-server $ sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak
3.1 /etc/dhcpd.conf 설정
$ sudo vi /etc/dhcp/dhcpd.conf subnet 192.168.1.0 netmask 255.255.255.0 { # range dynamic-bootp 192.168.1.90 192.168.1.95; option routers 192.168.1.1; option subnet-mask 255.255.255.0; option broadcast-address 192.168.1.255; # IP address of TFTP server , default ,it's me # next-server 192.168.0.1 ; default-lease-time 86400; # 86400/3600 = 24 hour max-lease-time 86400; # 86400/3600 = 24 hour host dm385 { hardware ethernet 32:30:3a:63:64:3a; fixed-address 192.168.1.4; option root-path "/home/jhlee/dm8127/dm385/Source/ipnc_rdk/target/filesys"; # option root-path "192.168.1.4:/home/jhlee/dm8127/dm385/Source/ipnc_rdk/target/filesys"; filename "/tftpboot/dm385/uImage"; } }
https://help.ubuntu.com/community/isc-dhcp-server
http://www.bctes.com/dhcpd.conf.5.html
http://linux.die.net/man/5/dhcp-options
3.2 DHCP Server 동작방법
$ sudo service isc-dhcp-server restart $ sudo service isc-dhcp-server start $ sudo service isc-dhcp-server stop
https://help.ubuntu.com/community/isc-dhcp-server
3.3 U-BOOT 설정 및 TEST (Target Board)
Target Board에서 U-Boot를 설정을 해보고, 이를 제조사의 SDK 설치 한 다음
U-BOOT 설정을 하고 TEST를 해보자.
A. Target Board의 U-BOOT CONFIG
U-BOOT의 CONFIG에서 BOOTP를 이용하여, 받고 싶은 파라메터 설정 및 확인
이를 이용하여 쉽게 DHCP Server에서 설정을 하자 (가능할 경우만)
$ vi include/configs/dm385_ipnc.h #define CONFIG_BOOTP_DEFAULT #define CONFIG_BOOTP_DNS #define CONFIG_BOOTP_DNS2 #define CONFIG_BOOTP_SEND_HOSTNAME #define CONFIG_BOOTP_GATEWAY #define CONFIG_BOOTP_SUBNETMASK #define CONFIG_BOOTP_BOOTPATH
관련소스
vi net/bootp.c
B. Target Board의 U-BOOT 의 환경설정
- DHCP 명령으로 BOOTP를 진행한다고 할 경우
DM388_IPNC# dhcp DM388_IPNC# bootp
- Static IP 설정 및 Network 정보 직접설정.
Network에서 DHCP Server가 충돌나는 경우가 많기 때문에 아래와 같이 직접 설정.
DM388_IPNC# setenv ipaddr 192.168.1.102 DM388_IPNC# setenv netmask 255.255.255.0 DM388_IPNC# setenv serverip 192.168.1.100 DM388_IPNC# setenv rootpath /home/jhlee/dm8127/dm385/Source/ipnc_rdk/target/filesys DM388_IPNC# saveenv
DM388_IPNC# setenv nfsargs 'root=/dev/nfs rw nfsroot=${serverip}:${rootpath}'
DM388_IPNC# ping 192.168.1.100
- UBOOT 관련 설정
https://www.denx.de/wiki/DULG/UBootScripts
- UBOOT Linux BOOT Args
http://www.denx.de/wiki/view/DULG/UBootEnvVariables
- DHCP-PC-TEST방법
4. TFTP Server 설정
TFTP Server Package는 여러 종류가 있으며, 가장 기본 되는 Xinet damon에서 관리하는 TFTP 설치하자.
* 다른 TFTP-HPA Package와 같이 설치할 경우, 문제가 발생할 수 있으니, 지우고 설치하자.
(sudo apt-get remove tftpd-hpa)
$ sudo apt-get install xinetd tftpd tftp $ sudo mkdir /tftpboot $ sudo chmod -R 777 /tftpboot
- xinetd(daemon) 설정
$ sudo vi /etc/xinetd.d/tftpd // 새파일 생성 ## ## ## comments service tftp { protocol = udp port = 69 socket_type = dgram wait = yes user = nobody server = /usr/sbin/in.tftpd server_args = /tftpboot disable = no } $ sudo /etc/init.d/xinetd restart
4.1 How To TEST
A. How to do test on PC
$ ls /tftpboot zImage $ tftp 192.168.1.100 tftp> ? Commands may be abbreviated. Commands are: connect connect to remote tftp mode set file transfer mode put send file get receive file quit exit tftp verbose toggle verbose mode trace toggle packet tracing status show current status binary set mode to octet ascii set mode to netascii rexmt set per-packet retransmission timeout timeout set total retransmission timeout ? print help information tftp> get zImage Received 4382621 bytes in 1.5 seconds tftp> quit
B. How to do test on EVM (Target Board)
U-Boot에서 tftpboot or tftp로 down을 받아본다.
만약 DHCP Server를 설정하지 않았다면, 아래와 같이 Network를 설정해준다.
$ setenv ipaddr 192.168.1.102 $ setenv netmask 255.255.255.0 $ setenv serverip 192.168.1.100 $ tftp 0x8100000 am437x/zImage
C. TFTPBOOT on EVM (Target Board)
TFTP을 이용하여, BOOT하기,
기존의 NAND BOOT와 다르며, 아래와 같이 Load Address를 알아내어, 아래와 같이 계산한다.
Load address - uImage header size(64bytes)
0x80007FC0 = 0x80008000 - 0x040
$ setenv bootcmd 'nboot 0x80700000 0 0x500000;bootm 0x80700000' ### NAND BOOT $ setenv bootcmd 'tftpboot 0x80007FC0 dm368ipnc/uImage_ipnc_dm368;bootm 0x80007FC0;' ### TFTP BOOT ### TFTPBOOT & NETWORK SETTING $ setenv ipaddr 192.168.1.102 $ setenv netmask 255.255.255.0 $ setenv serverip 192.168.1.100 $ tftpboot 0x80007FC0 dm368ipnc/uImage_ipnc_dm368 $ bootm 0x80007FC0
Kernel Log 확인
## Booting kernel from Legacy Image at 80007fc0 ... Image Name: Linux-2.6.37_IPNC_DM368_5.1.0 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 4114688 Bytes = 3.9 MB Load Address: 80008000 Entry Point: 80008000 Loading Kernel Image ... OK
5. NFS Server 설정
5.1 KERNEL NFS CONFIG (Target Board)
Target Board에서 Kernel이 NFS Mount가 될수 있도록 Kernel config를 수정을 해주자.
- filesystem->Network file system
KERNEL CONFIG # # Pseudo filesystems # ...... CONFIG_NETWORK_FILESYSTEMS=y CONFIG_NFS_FS=y CONFIG_NFS_V3=y # CONFIG_NFS_V3_ACL is not set CONFIG_NFS_V4=y # CONFIG_NFS_V4_1 is not set CONFIG_ROOT_NFS=y # CONFIG_NFS_USE_LEGACY_DNS is not set CONFIG_NFS_USE_KERNEL_DNS=y # CONFIG_NFS_USE_NEW_IDMAPPER is not set # CONFIG_NFSD is not set CONFIG_LOCKD=y CONFIG_LOCKD_V4=y CONFIG_NFS_COMMON=y CONFIG_SUNRPC=y CONFIG_SUNRPC_GSS=y CONFIG_RPCSEC_GSS_KRB5=y # # Kernel hacking # .......... CONFIG_DEBUG_FS=y CONFIG_DEBUG_KERNEL=y CONFIG_EARLY_PRINTK=y
http://www.tldp.org/HOWTO/NFS-Root-3.html
5.2 NFS Server 설치
$ sudo apt-get install nfs-common nfs-kernel-server portmap
- exports 설정방법
$ sudo vi /etc/exports # #/home/jhlee/am437x/targetNFS *(rw,nohide,insecure,no_subtree_check,async,no_root_squash) # ## For AM437x /home/jhlee/am437x/works/targetNFS *(rw,nohide,insecure,no_subtree_check,async,no_root_squash) ## For DM8127-IPNC /home/jhlee/dm8127/work/Source/ipnc_rdk/target/filesys *(rw,no_root_squash,no_all_squash,sync) /home/jhlee/dm8127/dm385/Source/ipnc_rdk/target/filesys *(rw,no_root_squash,no_all_squash,sync) ## For DM368-IPNC /home/jhlee/dm368/mt5/Source/ipnc_rdk/target/filesys_dm368 *(rw,no_root_squash,no_all_squash,sync)
http://linuxconfig.org/how-to-configure-nfs-on-linux
- 동작방법
$ sudo /etc/init.d/nfs-kernel-server restart $ sudo /etc/init.d/portmap restart
- U-BOOT 설정시 Debugging 및 TIP (Target board)
- NFS Debugging 원하면, nfsrootdebug
- Mount 시점을 늦추고 싶다면, rootdelay=4 사용하자.
- earlyprintk를 사용하면, KERNEL CONFIG의 Kernel hacking->Early printk 체크를 했다면, 사용하자.
- NFS Mount를 하는데, 제대로 되지 않는다면, ip=192.168.1.168 network 설정확인하자
$setenv bootargs 'console=ttyO0,115200n8 root=/dev/nfs nfsrootdebug rw rootdelay=10 mem=80M vram=4M notifyk.vpssm3_sva=0xBFD00000 nfsroot=192.168.1.100:/home/jhlee/dm8127/dm385/Source/ipnc_rdk/target/filesys,nolock eth=32:30:3a:63:64:3a ip=192.168.1.168 cmemk.phys_start=0x85000000 cmemk.phys_end=0x89000000 cmemk.allowOverlap=1 earlyprintk';
아래는 nfsrootdebug을 이용한 debugmsg이며, 이렇게 안될 경우, rootdelay 사용해야함.
NFS: MNTPATH: '/home/jhlee/dm8127/dm385/Source/ipnc_rdk/target/filesys' NFS: sending MNT request for 192.168.1.100:/home/jhlee/dm8127/dm385/Source/ipnc_rdk/target/filesys PHY: 0:00 - Link is Up - 1000/Full NFS: failed to create MNT RPC client, status=-113 NFS: unable to mount server 192.168.1.100, error -113 VFS: Unable to mount root fs via NFS, trying floppy. VFS: Cannot open root device "nfs" or unknown-block(2,0) Please append a correct "root=" boot option; here are the available partitions:
*bootargs 설정
https://www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt
5.3 NFS PC-TEST
- rpcinfo를 이용하여 nfs 동작확인
$ rpcinfo -p | grep nfs 100003 2 tcp 2049 nfs 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100003 4 udp 2049 nfs $ rpcinfo -p | grep portmap 100000 4 tcp 111 portmapper 100000 3 tcp 111 portmapper 100000 2 tcp 111 portmapper 100000 4 udp 111 portmapper 100000 3 udp 111 portmapper 100000 2 udp 111 portmapper
- KERNEL CONFIG 확인
$ cat /proc/filesystems | grep nfs nodev nfs nodev nfs4 nodev nfsd
- PC에서 NFS TEST
$ mount -t nfs -o nolock 192.168.1.100:/home/jhlee/dm8127/dm385/Source/ipnc_rdk/target/filesys /mnt/net $ umount /mnt/net // unmount $ ls /sbin/mount. // mount 지원되는 filesystem 확인 mount.fuse mount.nfs mount.ntfs mountall mount.lowntfs-3g mount.nfs4 mount.ntfs-3g
6. SAMBA 관련설정
6.1 SAMBA Package 설치 및 설정
아래와 같이 Package를 설치 해주고 Samba 관련설정을 해주자.
$ sudo apt-get install samba // sudo smbpasswd -a username // 자신의 username $ sudo smbpasswd -a jhlee // 나의 username [sudo] password for jhlee: New SMB password: Retype new SMB password: $ sudo vi /etc/samba/smb.conf ; 아래와 같이 homes 추가하면 자동으로 user 관리가 되며, tftpboot 인경우는 제가 따로 필요해서 추가했습니다. ; smb.conf에서 ; 은 주석입니다. [homes] comment = Home Directories valid users = %S read only = Yes ;read write 할 경우 아래와 같이 no ;read only = no or writable = yes browseable = Yes ;create mask = 0755 ;directory mask = 0755 [tftpboot] comment = TFTP Server Images path = /tftpboot read only = Yes guest ok = yes ;valid users = jhlee browseable = yes $ sudo /etc/init.d/smbd restart // Samba Server Restart!
6.2 Samba Server 동작 확인 및 연결제거 방법
상위에서 설치를 했으니, Samba Server의 동작을 각각 Linux 및 Window에서 확인하자.
smbclient를 이용하여 아래와 같이 Samba의 정보를 상태를 확인하고 제어가 가능하다.
만약 command가 없다면 상위 apt-get install로 설치하면된다.
- Samba Server 확인 (Linux)
$ smbclient -U jhlee //192.168.1.100/homes WARNING: The "syslog" option is deprecated Enter jhlee's password: Domain=[WORKGROUP] OS=[Windows 6.1] Server=[Samba 4.3.11-Ubuntu] smb: \> ls ... // 상위 PATH로 mount 된 File 정보가 출력된다. ... smb: \> help // smbclient에서 제공하는 기능을 볼수 있으며, File 생성/수정을 할 수 있다. ? allinfo altname archive backup blocksize cancel case_sensitive cd chmod chown close del dir du echo exit get getfacl geteas hardlink help history iosize lcd link lock lowercase ls l mask md mget mkdir more mput newer notify open posix posix_encrypt posix_open posix_mkdir posix_rmdir posix_unlink print prompt put pwd q queue quit readlink rd recurse reget rename reput rm rmdir showacls setea setmode scopy stat symlink tar tarmode timeout translate unlock volume vuid wdel logon listconnect showconnect tcon tdis tid logoff .. ! smb: \> exit // smbclient에서 종료하고 나오자.
- Window 탐색기에서 Network Driver로 연결
잠시 사용할게 아니라면, 가능하면 네트워크 드라이버를 이용하고 연결하고 사용하는 게 편하다.
컴퓨터에서 우측버튼을 누른후 네트워크 드라이버 연결 선택
이미 네트워크 드라이버를 생성했다면 제거 또한 편하게 탐색기에서 가능하다.
Window의 cmd를 이용하여 현재 Network 연결상태를 가능한데, 만약 네트워크 드라이버를 이용하지 않는다면 아래와 같이 연결상태를 확인 가능하다.
- Samba 연결상태확인 (Window)
C:\Users\JHLEE>net use 새 연결 정보가 저장되지 않습니다. 상태 로컬 원격 네트워크 --------------------------------------------------------------------------- 연결 끊김 \\192.168.1.100\homes Microsoft Windows Network 연결 끊김 \\192.168.1.100\jhlee Microsoft Windows Network 연결 끊김 \\192.168.1.100\IPC$ Microsoft Windows Network
네트워크 드라이버로 연결된 경우
C:\Users\JHLEE>net use 새 연결 정보가 저장됩니다. 상태 로컬 원격 네트워크 ------------------------------------------------------------------------------- OK Y: \\192.168.1.101\homes Microsoft Windows Network 사용 못함 Z: \\192.168.1.100\homes Microsoft Windows Network 명령을 잘 실행했습니다.
- Window에서 Samba 연결제거
C:\Users\JHLEE>net use \\192.168.1.100\homes /delete
6.3 Samba 기타 문제사항
- 문제사항-1
- 문제사항-2
http://idchowto.com/?p=34206
http://nicejhong.tistory.com/entry/Ubuntu-Getting-Started-with-Virtual-box