7/20/2015

Ubuntu 12.04 기본개발환경 설정 (SSH, GIT, TFTP, DHCP, NFS, SAMBA)

1. Ubuntu 설치 및 기본명령어 학습


  • Virtual Box 설정 
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)
  https://www.ubuntu.com


  • APT 명령사용법
apt-get 명령을 이용하여 쉽게 package를 설치하고 검색 및 제거가 가능하다.이에 관련된 명령어를 자세히 알아두자.

  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 이용
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 
이미 Local Repository 가 생성이 되어 있으므로 아래 방법으로 Update만 하면된다.

// 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 설치 
Kernel Image 생성시 mkimage를 찾지 못할 경우, 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
  * Codesourcery version (Window지원)
  https://www.mentor.com/embedded-software/codesourcery

  * Linaro version
  https://wiki.linaro.org/WorkingGroups/ToolChain
   
  • GCC 관련 매뉴얼 
   빌드 옵션 및 새로운 기능확인 


2.3 Ubuntu 12.04 64bit OS 사용할 경우 추가 설치 
Ubuntu OS 64bit일 경우 32bit version과 호환성을 위해서 Package 설치하자
설치전 필요한 패키지들 아래의 사이트에서 각 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
  http://processors.wiki.ti.com/index.php/Sitara_Linux_SDK_64_Bit_Ubuntu_Support


  • Ubuntu의 Question
  http://askubuntu.com/questions/297151/how-to-run-32-bit-programs-on-a-64-bit-system


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를 진행한다고 할 경우
DHCP Server에서 BOOTP를 설정하여 쉽게 진행이 가능하겠지만, Network 여건이 그렇지 못한 경우가 많다.


DM388_IPNC# dhcp 
DM388_IPNC#  bootp 

  • Static IP 설정 및 Network 정보 직접설정.
DHCP Server를 사용하면 아래의 정보들을 쉽게 설정하겠지만,
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://ahyuo79.blogspot.com/search/label/Uboot
  https://www.denx.de/wiki/DULG/UBootScripts


  • UBOOT Linux BOOT Args 
  http://www.denx.de/wiki/view/DULG/LinuxBootArgs
  http://www.denx.de/wiki/view/DULG/UBootEnvVariables

  • DHCP-PC-TEST방법
  https://rbgeek.wordpress.com/2012/04/29/how-to-install-the-dhcp-server-on-ubuntu-12-04lts/


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)
아래는 DM368 설정의 예이다.

  1. NFS Debugging 원하면,  nfsrootdebug
  2. Mount 시점을 늦추고 싶다면, rootdelay=4  사용하자. 
  3. earlyprintk를 사용하면, KERNEL CONFIG의 Kernel hacking->Early printk 체크를 했다면, 사용하자. 
  4. NFS Mount를 하는데, 제대로 되지 않는다면, ip=192.168.1.168 network 설정확인하자 
*earlyprintk일 경우, 초반에 Kernel이 멈출 경우 유용하다.


$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 
ubuntu 에서 직접 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 
만약 상위 설치도중(apt-get install samba)  웹주소가 제대로 안된다면,반드시 상위 apt-get update 이용후 다시 시도하자

  • 문제사항-2 
연결이 잠시는 되고 디렉토리도 들어가지만, 잠시후 아래 Message와 함께 접속이 끊기는 현상 apt-get upgrade 후 다시 시도



  http://idchowto.com/?p=34206
  http://nicejhong.tistory.com/entry/Ubuntu-Getting-Started-with-Virtual-box