레이블이 DevelEnv인 게시물을 표시합니다. 모든 게시물 표시
레이블이 DevelEnv인 게시물을 표시합니다. 모든 게시물 표시

5/21/2018

Ubuntu 16.04 LTS Version 설치 및 설정

1. Ubuntu 16.04 설치 

기존까지 Ubuntu 14.04 LTS 64bit 와 Ubuntu 12.04 LTS 64bit Version으로만 이용하다가 얼마전에 Ubuntu가 18.04 Release가 되었으며,
Ubuntu 16.04도 더이상은 최신 Version 이라고 할수 없을 것 같아 이를 설치해보고 현재 Ubuntu의 최신기능과 관련부분을 알아보도록 하자.

  https://www.ubuntu.com

  • 다양한 CPU지원 
Ubuntu가 Desktop 및 Server 와 IOT와 Cloud 로 분류가 되어서 나오고 있으며, x86을 벗어난 ARM64 까지 지원을 하고 있다.
집에 있는 Odroid 및 다른 EVM에서 여러번 봤지만 공식 홈페이지에서 보기는 이번이 처음이다.

  • Could 기능 및 OpenStack 지원 
Docker 기반으로 Container를 이용하여 쉽게 설치 지원이 가능하며, Kubernetes도 현재 지원이 되고 있는 상황이다
이미 Docker기능 및  Jenkins로 이전 Version에서 사용을 했지만, 공식사이트에서 보니 새롭다.

  https://www.ubuntu.com/containers


  • 설치문서 
  https://tutorials.ubuntu.com/tutorial/tutorial-install-ubuntu-desktop?_ga=2.9632694.2071981096.1526908963-614826485.1523275796#8


1.1 Download Ubuntu Image

Virtual Box 기반으로 최소의 용량을 사용하기 위해서 Desktop Version으로 설치진행

  • Download Mirror Site 
  https://launchpad.net/ubuntu/+cdmirrors?_ga=2.206215952.2071981096.1526908963-614826485.1523275796
  http://mirror.kakao.com/ubuntu-releases/16.04/


  ubuntu-16.04.4-desktop-amd64.iso


1.2  Virtual Box 기본설정 

Virtual Box 설치 및 설정은 크게 변경된 것이 없음으로 아래와 같이 동일하게 구성을 하자
  1. 기본 Ubuntu VDI 30G 새로생성 
  2. 생성된 VDI를  용량최소화위해 동적할당 설정 
  3. 네트워크->브리지 어댑터 (어댑터에 브리지) 설정 
  4. 메모리 설정 변경 (본인의 램의 절반수준)
  5. 공유폴더 설정 (추후 설정)
  6. 저장소 설정 IDE 에 Ubuntu Image ISO 추가 
  https://ahyuo.blogspot.kr/search/label/Virtual%20Box


2. Ubuntu 16.04 LTS 기본설치 

  • 기존과 동일하게 설정 
  1. 설치->언어 : 한국어 설정 
  2. 설치->키보드 배치 : 한국어- 한국어 (101/104키호환)
  3. 설치->이름/컴퓨터이름 설정 (계정설정)

설치후 자동으로 IDE의 Ubuntu Image ISO가 제거됨
이전과 다르게 다른 VDI를 자동으로 잡으며 이를 바로 볼수 있다.

  • 기본설치 후 Virtual Box 확장패키지 설치 
  1. 좌측의 맨위 검색에서 Terminal 검색 및 런처에 고정 
  2. 장치->게스트 확장 CD 이미지 삽입 
  3. 실행 및 암호입력 
  4. Ubuntu Reset 

  • Virtual Box Machine 부분 설정 
  1. 일반->고급  클립보드:  양방향 설정 
  2. 일반->고급 드래그 앤 드롭: 양방향 설정 

3. Ubuntu 기본환경 설정 

우선 좌측 상위 맨위 검색버튼을 눌러 Terminal을 검색하여 실행한 후 이를 런처에 고정하자.

  • SSH Server 설정
$ sudo apt-get install openssh-server
$ sudo apt-get install vim     // vim 방향키 문제가 있어 다시 설치 


  • SSH Client - Xshell4 에러 (Xshell6 변경)
등록 정보 ->SSH -> 보안 -> 암호화 설정  확인해보면 해결된다고 하는데, 설정을 봐도 크게 이상이 없다
현재 Xshell4의 보안 알고리즘이 지원을 못한다 그래서 Xshell 6으로 변경 후 아래의 증상은 해결되었다.


  https://www.netsarang.co.kr/forum/xshell/2155/%EC%95%94%ED%98%B8_%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98_%EC%97%90%EB%9F%AC


  • Samba 설정 
$ sudo apt-get install samba  

$ sudo smbpasswd -a jhlee 
New SMB password:
Retype new SMB password:
Added user jhlee.

$ sudo vi /etc/samba/smb.conf   
.......
#======================= Share Definitions =======================

[homes]
comment = Home Directories
valid users = %S
read only = no
;read/write 가능하게 설정하고 싶다면 아래와 같이 설정 
;read only = no or writable = yes 
;read only 만 할 경우는 yes로 설정 
browseable = Yes
;create mask = 0755
;directory mask = 0755

$ sudo /etc/init.d/smbd restart // Samba Server Restart!

본인이 편하다고 생각이 들면 윈도우 탐색기에서 네트워크 드라이브 연결 (옵션)


  • GIT 설치
$ sudo apt-get install git 


  • 공유폴더 설정
아래와 같이 권한을 설정을 한 후

$ sudo vi /etc/group 
    .....
    .....
    vboxsf:x:1001:jhlee  --- > vboxsf 찾은 다음  자신의 ID  추가 

Virtual Box->설정->공유폴더 설정


아래와 같이 공유 확인 가능

$ ls /media/sf_SHARED/
....


3.1 Virtual Box의 VDI 추가 및 확인  

  • 기존 사용하던 VDI 및 새로생성할 VDI 확인  
  1. Virtual Box에서 저장소->SATA에 기존에 사용중 VDI or 새로생성한 VDI를 추가 
  2. Ubuntu 로 부팅 후  각 개별 command로 확인 
  3. df -h 용량 확인 
  4. cat /proc/partitions  // VDI 정보확인 
  5. sudo fdisk -l  // VDI 정보 확인 


$ df -h    // 사용되는 Filesystem 용량을 간단히 확인 
Filesystem      Size  Used Avail Use% Mounted on
udev            971M     0  971M   0% /dev
tmpfs           200M  3.9M  196M   2% /run
/dev/sda1        28G  4.4G   22G  17% /
tmpfs           997M  212K  997M   1% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           997M     0  997M   0% /sys/fs/cgroup
SHARED          267G  169G   99G  64% /media/sf_SHARED
tmpfs           200M   40K  200M   1% /run/user/1000

$ cat /proc/partitions       // 새로 생성된 VDI 및 기존 VDI를 추가 했기때문에 이를 확인 
major minor  #blocks  name

  11        0    1048575 sr0
  11        1    1048575 sr1
   8        0   31457280 sda    // Ubuntu VDI 
   8        1   29359104 sda1
   8        2          1 sda2
   8        5    2095104 sda5
   8       16   31457280 sdb     // 새로 생성한  VDI 2번째 , 새로 생성하여 Partition을 잡아야한다. 
   8       32   31457280 sdc     // 기존에 존재하던 VDI 3번째  
   8       33   31456256 sdc1
   8       48   31457280 sdd     // 기존에 존재하던 VDI 4번째  
   8       49   31456256 sdd1
$ lsblk 


  • 새로생성한 VDI  Partition 설정 및 FS Format
상위에서 새로 추가된 VDI 설정확인

 $ sudo fdisk /dev/sdb // 상위에서 확인한 새로 추가된 VDI 
Welcome to fdisk (util-linux 2.27.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x9975df29.

Command (m for help): n     // Partion 추가 
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-62914559, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-62914559, default 62914559): 

Created a new partition 1 of type 'Linux' and of size 30 GiB.

Command (m for help): p    // 추가된 Partion 확인 
Disk /dev/sdb: 30 GiB, 32212254720 bytes, 62914560 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x9975df29

Device     Boot Start      End  Sectors Size Id Type
/dev/sdb1        2048 62914559 62912512  30G 83 Linux

Command (m for help): w  // 저장  
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

$ sudo mkfs.ext4 /dev/sdb1  // 새로 생성된 Partition 을 EXT4로 포맷 


3.2 추가된 VDI의 자동마운트 

UUID는 Partition을 생성을 한 후에 이 값을 얻을 수 있으므로,  다음과 같이 sdx1 x는 drive를 말하고 1은 Partition을 말한다.
만약 추가했지만, 잡히지 않는다면, 위의 fdisk에서 새로 잡도록하자.

$ ls -l /dev/disk/by-uuid/  
or 
$  sudo blkid
lrwxrwxrwx 1 root root 10  5월 23 21:06 35e74ae8-80c1-4832-bff6-674b4a93d6c2 -> ../../sdd1
lrwxrwxrwx 1 root root 10  5월 23 21:06 b771bdc7-e7f7-454b-a48a-df598833169d -> ../../sdc1
lrwxrwxrwx 1 root root 10  5월 23 21:06 ce6b9446-1e0f-4330-b7e9-923a06501ae9 -> ../../sda5
lrwxrwxrwx 1 root root 10  5월 23 21:06 ed70c2a9-0c95-4e4e-81d8-9bdf6adfe839 -> ../../sda1
lrwxrwxrwx 1 root root 10  5월 23 21:06 ff6cb88e-963c-4bf2-ab67-f24b9e7918b5 -> ../../sdb1

$ sudo vi /etc/fstab

UUID=ed70c2a9-0c95-4e4e-81d8-9bdf6adfe839 /               ext4    errors=remount-ro 0       1
# swap was on /dev/sda5 during installation
UUID=ce6b9446-1e0f-4330-b7e9-923a06501ae9 none            swap    sw              0       0

 
## 새로 mount할 곳 ,뒤에 옵션 현재는 동일하게 사용 중, errors=remount-ro 0       1 

##RaspberryPI                                                     
UUID=ff6cb88e-963c-4bf2-ab67-f24b9e7918b5 /home/jhlee/raspberrypi   ext4    errors=remount-ro     0       1 

- 저장후 재부팅 

$ sudo chown jhlee:jhlee -R raspberrypi 

이제 생성된 UUID기반으로 /etc/fstab에서 설정을 해주자.


  • 자세한 내용은 아래 참고 
  https://ahyuo.blogspot.kr/2013/12/virtual-box-ubuntu-1204.html

2/20/2018

Ubuntu 설치된 중복 Package 관리방법

1. Ubuntu에서 Package 관리 방법 

Ubuntu의 기본 Package 관리방법
  https://ahyuo.blogspot.com/2015/07/ubuntu.html

APT가 기존의 것보다 상당히 많은 것 같아서 아래와 같이 나열해본다.

  • APT Command 관련 명령어 
  1. apt-get
  2. apt-cache
  3. apt (apt-get/apt-cache 혼합)
  4. apt-add-repository (add-apt-repository와 동일 )
  5. apt-key
  6. apt-ftparchive
  7. apt-extracttemplates
  8. apt-key
  9. apt-mark 
  10. apt-sortpkgs 

 상당히 많은 것 같은데, 현재 다 알필요가 없는 것 같아서 주요한 것만 다시 정리

  • update-alternative  명령 
  1. 내가 Download한 binary를 Package로 등록/삭제  
  2. 설치되었으며, 중복된 Package 중 내가 원하는 Version 선택가능  

  • 관련 Manual 
  https://linux.die.net/man/8/update-alternatives
  https://wiki.debian.org/HowToPackageForDebian

1.1 apt / update-alternatives 사용법 

apt를 보면 apt-get/apt-cache 기능을 간략하게 사용하는 것 같다.

$ apt
Usage: apt [options] command

CLI for apt.
Basic commands: 
 list - list packages based on package names
 search - search in package descriptions
 show - show package details

 update - update list of available packages

 install - install packages
 remove  - remove packages

 upgrade - upgrade the system by installing/upgrading packages
 full-upgrade - upgrade the system by removing/installing/upgrading packages

 edit-sources - edit the source information file


동일한 2개 Package를 설치했을 경우 선택가능 및 내가 원한것을 link로 연결하여 package에 연결한다.

$ sudo update-alternatives
update-alternatives: 아래의 옵션 중에 하나를 선택해서 사용한다. 
   --install link name path priority [--slave link name path]...
   --set name path
   --remove name path
   --remove-all name
   --all
   --auto name
   --display name
   --get-selections
   --set-selections
   --query name
   --list name
   --config name


  • 실행파일 link 존재 
/etc/alternatives/

  • 설정관리 File 존재 
/var/lib/dpkg/alternatives,


2. 중복된 Package Version 변경 ( update-alternatives)

일반적으로 package 가 설치가 되면, /usr/bin/실행파일 link 파일생성이 되고 관련 Package와 연결이 되어있다.
그래서 중복된 Package이지만 Version 이 다른 것을 여러개 설치가 가능하다.


  • OpenJDK 두 개의 Version 설치 

$ sudo apt-get install openjdk-7-jdk openjdk-6-jdk 


  • OpenJDK 중 java 의 version 변경 
$ ls /var/lib/dpkg/alternatives/ | grep java // 사용여부 확인 (등록된 Link 확인)
java
javac
javadoc
javah
javap
javaws

$ sudo update-alternatives --config java  // Version 설정변경 
대체 항목 java에 대해 (/usr/bin/java 제공) 2개 선택이 있습니다.

  선택       경로                                          우선순ꡬ태
------------------------------------------------------------
  0            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      자동 모드
* 1            /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java   1061      수동 모드
  2            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      수동 모드


  • OpenJDK의 java 설치위치 확인 
$ sudo update-alternatives --list java
/usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java
/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java


  • OpenJDK의 java의 구조 파악 

$ sudo update-alternatives --query java
Name: java
Link: /usr/bin/java
Slaves:
 java.1.gz /usr/share/man/man1/java.1.gz
Status: manual    // Manual/Auto Mode   
Best: /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java  // 추천해주는 Package (Auto mode)
Value: /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java // 현재 사용중인 Package

Alternative: /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java  // 실제 설치된 대체 Package 주소  
Priority: 1061  // 우선순위이며 Auto Mode일 경우 높은 것을 자동설정 
Slaves:
 java.1.gz /usr/lib/jvm/java-6-openjdk-amd64/jre/man/man1/java.1.gz

Alternative: /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java  // 실제 설치된 대체 Package 주소 
Priority: 1071
Slaves:
 java.1.gz /usr/lib/jvm/java-7-openjdk-amd64/jre/man/man1/java.1.gz

설정된 모드를 더 쉽게 보여준다.

$ sudo update-alternatives --display java
java - 수동 모드
 링크가 현재 /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java 가리킴
/usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java - 우선순위 1061
  슬레이브 java.1.gz: /usr/lib/jvm/java-6-openjdk-amd64/jre/man/man1/java.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java - 우선순위 1071
  슬레이브 java.1.gz: /usr/lib/jvm/java-7-openjdk-amd64/jre/man/man1/java.1.gz
현재 가장 '좋은' 버전은 '/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java'입니다.


  • java 실제 구조파악 
$ ll /usr/bin/java
lrwxrwxrwx 1 root root 22  2월 24  2017 /usr/bin/java -> /etc/alternatives/java*

$ ll /etc/alternatives/java // 실행파일 link 존재 
lrwxrwxrwx 1 root root 46 10월 16 12:49 /etc/alternatives/java -> /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java*

$ vi /var/lib/dpkg/alternatives/java   // 관련 설정정보 (수동모드)  
manual
/usr/bin/java
java.1.gz
/usr/share/man/man1/java.1.gz

/usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java
1061
/usr/lib/jvm/java-6-openjdk-amd64/jre/man/man1/java.1.gz
/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java
1071
/usr/lib/jvm/java-7-openjdk-amd64/jre/man/man1/java.1.gz


  • 로그를 통한 설정확인 
$ ls /var/lib/dpkg/alternatives/     // 현재 update-alternatives를 설정된 file 전체검색 
animate                       fonts-japanese-gothic.ttf     jconsole                      newt-palette                  tdbbackup
appletviewer                  from                          jdb                           orbd                          telnet
automake                      ftp                           jexec                         pack200                       text.plymouth
awk                           gconftool                     jhat                          pager                         tnameserv
builtins.7.gz                 gem                           jinfo                         php                           traceroute6
......

$ cat /var/log/alternatives.log | tail -n 50  // 본인이 최근에 update-alternatives 사용한 흔적 ,더이전 log는  *.log.1 기록 



3. Download 한 실행파일 연결/제거 (update-alternatives)

Open JDK Download
  https://jdk.java.net/
  https://jdk.java.net/archive/

OpenJDK를 Download 하여 Link를 설정해보고 Link를 제거해보자.

  • 기본사용법 
update-alternatives --install link name path priority [--slave link name path]...
slave는 master 설정에 따라 동작한다고 한다.

  • Link 생성 및 설정변경 (Link만 생성)

$ sudo update-alternatives --install /usr/bin/java java /home/jhlee/jdk-9/bin/java 1091

$ sudo update-alternatives --config java  // 설정을 변경
대체 항목 java에 대해 (/usr/bin/java 제공) 3개 선택이 있습니다.

  선택       경로                                          우선순ꡬ태
------------------------------------------------------------
  0            /home/jhlee/jdk-9/bin/java                       1091      자동 모드
  1            /home/jhlee/jdk-9/bin/java                       1091      수동 모드
* 2            /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java   1061      수동 모드
  3            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      수동 모드


  • Link 제거 (Link만 제거)

$ sudo update-alternatives --remove java /home/jhlee/jdk-9/bin/java 
update-alternatives: 수동으로 선택한 대체 항목을 지우는 중 - java을(를) 자동 모드로 변경합니다
update-alternatives: using /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java to provide /usr/bin/java (java) in 자동 모드


  https://blog.thinkbee.kr/linux/linux-update-alternatives/
  https://askubuntu.com/questions/26498/how-to-choose-the-default-gcc-and-g-version
  https://blog.thinkbee.kr/linux/linux-update-alternatives/

2/20/2016

Cygwin 설치 및 Eclipse 을 위한 설정 (개발환경구성-1)

1. Window 용 Linux Package(Cygwin) 설치 

Cygwin에 크로스 컴파일러로 Cygwin와 MinGW 존재하며, 이를 설치를 하여 이곳에 설치를 해도 무방하다
윈도우에서 다양한 Linux Tool Package를 사용이 가능하며, 크로스 컴파일러로도 사용하기때문에 이를 설치한다.
현재 나의 경우는 ssh를 이용하여 이클립스와 연동하여 사용하는 것이 주 목적이다.

  • Download (Cygwin)설치 
  http://www.cygwin.com/
  상위 Cygwin에 MingGW도 포함 

  • MingGW 참고  
  http://www.mingw.org/
  http://rinovation.tistory.com/2
  https://www.eclipse.org/forums/index.php/t/1073505/


2. Cygwin 설치 및 재설치 

Cygwin은 윈도우의 제어판에서 프로그램 제거를 할 수가 없다.
설치시 이부분을 정확하게 인지하고 있어야한다.

setup-x86_64.exe 을 다시 실행하여 필요한 Package를 추가하여 재설치가 가능하다

  • Cygwin 설치방법 및 재설치 
setup-x86_64.exe를 실행을 하여 설치를 진행을 한다.






상위 그림에서 패키지를 제공해주는 사이트는 많으므로, 사이트를 아무거나 선택하자


상위 상단 좌측의 View를 Category로 변경 후
Devel에서 필요한 것들이 있다면 설치  Cross Compiler (Cygwin or Mingw64)


Net->openssh  및 ssh library 설치 ( 소스는 제외)


  • Cygwin 설치후 SSH 동작확인 
Cygwin64 Terminal을 이용 or Windows의 CMD 명령이용(하단의 PATH를 추가 한후)
설치된 Package를 실행



2.1 Cygwin 제거방법 

위에서 설명했듯이 Cygwin은 제어판의 프로그램에 나오지 않아서 직접삭제를 해야한다.
그리고, Cygwin에서 사용하고 있는 파일과 데몬이 있다고 중지를 하고 삭제를 진행을 해야한다.

regedit를 이용하여 레지스트리를 편집을 하고, 가능하면 편집의 찾기를 이용하여 찾자
Cygwin or Cygnus Solutions



아래의 Cygnus Solutions에서 Cygwin으로 삭제

  1. HKEY_LOCAL_MACHINE\SOFTWARE\Cygwin
  2. HKEY_CURRENT_USER\Software\Cygwin
  3. HKEY_USERS\.Default\Software\Cygwin  (현재 없음)


  http://infoarts.tistory.com/25

3. Cygwin 명령어와 Window 공유 (Eclipse 와 공유)

    1. Window Key + Pause/Break 
    2. 고급시스템 설정 선택 (좌측메뉴)
    3. 시스템속성창 의 고급->환경변수 선택 (맨아래에 위치) 
    4. 환경변수창이 아래의 시스템변수  PATH 선택 
    5. PATH 에   ;C:\cygwin64\bin  추가 



      https://www.howtogeek.com/howto/41382/how-to-use-linux-commands-in-windows-with-cygwin/


    4. Cygwin 설치 후 SSH Client 설정 (중요)

    외부에 Linux or Unix SSH Server가 존재하며 이는 Build Server 로 동작할 것이다.
    Window에서는 상위에서 Cygwin을 이용하여 Openssh가 설치된 상태이며, Cygwin Terminal or CMD 명령으로 ssh를 실행이 가능하도록 설정한다.

    Window에서 SSH Server에 매번 Password 입력없이 동작하게 하려고 목적이다.

    • SSH의 Key 생성 
    $ ssh-keygen -t rsa // 함께 엔터  id_rsa 생성
    $ ls .ssh  // id_rsa 생성확인 
    

    • Target Server 에 생성된 Key 복사

    $ ssh-copy-id jhlee@192.168.1.100    // SSH Server (ID: jhlee )  

    • ID입력만으로 Password 없이 로그인 가능 

    $ ssh jhlee@192.168.1.100        // 이제 암호 없이 SSH Server 접속가능  
    $ ls .ssh 
    id_rsa  id_rsa.pub  known_hosts


      http://marobiana.tistory.com/53
      https://m.blog.naver.com/PostView.nhn?blogId=ccm&logNo=60185667224&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F
      http://www.skybert.net/windows/creating-an-ssh-key-on-windows/

    11/21/2015

    ARM 용 Tool Chain 설치 및 관련 설정

    1. Tool Chain 설치준비

    기존 LINK는 찾아봤는데, 끊기고, 되는 곳은 아래의 사이트가 동작.
    공통된 ARM Core를 사용하기 때문에 DM8127 or DM8148 , DM368 다 동일하다.
    이 GCC가 본인사용하는 ARM version 이 지원하는가 중요 할뿐이다.
    하지만, ARM 64bit는 이야기가 다르기 때문에 이부분은 반드시 GCC Manual이나,
    관련부분을 확인해야겠다.

    • 지원사항 확인 및 설치방법
    만약 아래의 Link가 살아있다면, 이것대로 하는것이 가장편하고 좋은 것 같다.
    아래의 설명도 아래의 Link와 동일하다.
    구지 아래의 문서를 보지 않아도 되겠다.

    https://developer.ridgerun.com/wiki/index.php/Code_Sourcery_ARM_toolchain_2009q1-203

    1.1 Download 및 How to Install 

    ARM 32bit용을 지원하며, 위에서 언급했듯이 거의 모든 Coretex에서 지원하여 사용한다.
    • Download Tool Chain
    http://www.codesourcery.com/sgpp/lite/arm/portal/package4573/public/arm-none-linux-gnueabi/arm-2009q1-203-arm-none-linux-gnueabi.bin

    1.2 기본환경구성 및 준비 

    본인은 Ubuntu를 사용하기 때문에 Ubuntu기반으로 설명
    위의 Link 사이트에 들어가면 Red Hat에 관련 설명도 있으니, 이부분도 참고하시길

    /opt/codesourcery 에 설치할 것이며, 본인이 원한다면 주소를 변경을 하여도 상관은 없다.

    sudo mkdir -p /opt/codesourcery
    sudo chmod ugo+wrx /opt/codesourcery
    

    1. Download arm-2009q1-203-arm-none-linux-gnueabi.bin 파일
    2. Ubuntu의 Terminal에서 이파일을 실행 준비

    이 파일을 실행시키기 위해서 GTK관련부분이 필요하기에 아래와 같이 필요한 Package를 설치한다.

    1.3 BASH 관련부분 설정 확인

    sudo rm /bin/sh
    sudo ln -s /bin/bash /bin/sh
    

    1.4 GTK Package 설치 

    GTK 역시 32bit version으로 작성이 되어있으며, 만약 OS가 64bit이면 아래와 같이 32bit용을
    별도로 설치해주어 동작을 진행하도록 하자.
    64bit OS에서도 크게 문제없이 동작이 된다.

    • OS 32bit 인 경우 
    sudo apt-get install libgtk2.0-0:i386 libxtst6:i386 gtk2-engines-murrine:i386 libstdc++6 libxt6:i386
    sudo apt-get install libdbus-glib-1-2:i386 libasound2:i386
    

    • OS 64bit일 경우
    아래와 같이 32bit version으로 동작 하게 관련 Package 설치

    sudo apt-get install ia32-libs ia32-libs-gtk 
    

    위와 같이 설치후, 32bit version과 동일

      https://sourcery.mentor.com/sgpp/lite/arm/portal/kbentry62

    1.5 Virtual Machine 설치

    sudo apt-get install openjdk-6-jre
    

    for Ubuntu 16.04

    sudo add-apt-repository ppa:openjdk-r/ppa  
    sudo apt-get update   
    sudo apt-get install openjdk-7-jre 
    


    2. Tool chain 설치 

    UBuntu의 Terminal에서 실행모드를 추가 한 후, 실행하면

    chmod ugo+x arm-2009q1-203-arm-none-linux-gnueabi.bin
    ./arm-2009q1-203-arm-none-linux-gnueabi.bin
    


    2.1 기본설치 



                            Next 와 I agree로 진행


                          설치되는 Tool Chain의 기본 Library 확인


                           Typical 선택 및 진행
                                   
                                 
                           /opt/codesourcery/arm-2009q1 으로 변경
                 
                                 
                           Do not modify PATH로 진행

                                   
                       Link Folder -> Don't create Links 선택 진행
                      (이부분 동적 Library  Link path 이므로 기억해야한다.)
                      만약 본인이 추가로 동적 Library를 사용한다면, others를 넣고 설정


                         위와 같이 설치 될 예정 Link Folder에 문제가 있지만,
                         추후 확장을 안한다면 문제가 없다.
                                 
    2.2 본인 PATH 및 Link Folder 설정 

    본인의 Folder안에 설치가 가능하며, 위의 Link Folder를 이용하여 Link Folder도 설정가능하다.




    솔직히, 2.1로 설치하는 것이 편하며, Link Folder 역시 별도로 아직 사용하지 않는것 같다.
    Shared Library를 이곳에 추가 할일도 없는 것 같다.


    3. Linux의 환경설정 

    아래의 설정을 .vimrc에 강제로 추가해도 되지만, source로 하는것이 더 편할것 같다.
    UBOOT와 KERNEL에서 ARCH와 CROSS_COMPILE 환경변수는 필수이며,
    INSTALL_MOD_PATH 는 Linux Kernel에서 Module의 설치 장소이다.


    • 환경변수 설정

    $ vi setPATH.sh
    #!/bin/sh
    # source setPATH.sh
    export TOOLCHAIN_PATH=/opt/codesourcery/arm-2009q1/bin/
    export TOOLCHAIN_PATH1=/home/jhlee/dm8148/CodeSourcery/Sourcery_G++_Lite/bin
    export TOOLCHAIN_PATH2=/home/jhlee/dm8127/CodeSourcery/Sourcery_G++_Lite/bin
    
    export PATH=$PATH:${TOOLCHAIN_PATH}
    
    export ARCH=arm
    export CROSS_COMPILE=arm-none-linux-gnueabi-
    export INSTALL_MOD_PATH="${HOME}/dm8148/targetfs"    
    


    •  source를 이용하여 적용 


    $ source setPATH.sh 
    
    

    **source 사용이유 

    ./setPATH.sh 만 실행할 경우, 이 shell script가 실행되는동안 이 PATH가 적용이 된다.
    그래서 source를 사용하여 지속적으로 적용시킨다.

    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/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

    7/12/2015

    Ubuntu Package 검색/설치/제거 방법

    1. Ubuntu 의 Package 관리  

    Ubuntu Linux는 Debian Linux 계열로 Linux로 *.deb 방식으로 package를 관리한다.
    이에 관련된 Command는 dpkg 과 apt-x tool을 지원한다.
    DPKG(Debian Package management system)는 의미 하며, APT(Advanced Packaging Tool)의 의미이다.

      https://wiki.debian.org/ko/DebianPackageManagement

    • dpkg command
    1. dpkg은  package를 설치/검색/제거가 가능한 Command이며, 대신 *.deb 만 가능 

    • APT Command 관련 명령어
    1. apt-get : package 설치/제거 및 Package Index update 기능, 및 Package check 
    2. apt-cache : repository package 검색 및 설치된 Package 검색 , 의존성 검사 
    3. add-apt-repository : repository 추가 및 제거 

    • DPKG(Debian Package) 과 APT(Advanced Packaging Tool) 관련 Tool 비교 
    dpkg command 는 Debian Linux에서 사용하는 패키지 관리시스템이며, 설치가 될 경우 *.deb로 관리하여 이를 설치/제거 되어진다.
    APT(Advanced Packaging Tool)도 역시 기존의 *.deb은 설치/제거를 하며 보다 쉽게 설치 가능하다.

      https://en.wikipedia.org/wiki/Dpkg
      https://en.wikipedia.org/wiki/APT_(Debian)

    • 관련 Man Page
      https://linux.die.net/man/8/apt-get      // FILE 부분에서 관련 저장소 및 다른 명령확인
      https://linux.die.net/man/8/apt-cache   // FILE 부분에서 관련 저장소 및 다른 정보확인
      http://manpages.ubuntu.com/manpages/precise/man1/add-apt-repository.1.html


    1.1. apt-get/apt-cache 기능확인


    • apt-get 사용법
    Package를 설치/제거기능 기본이며, Package Index update 및 종속되어지 Package 제거기능, Source/Binary Download 및 의존성체크 기능

    $ sudo apt-get 
    
    apt-get은 패키지를 다운로드하고 설치하는 간단한 명령입니다.
    가장 많이 사용하는 명령은 update 명령과 install 명령입니다
    
    Commands:
       update - 새 패키지 목록 가져오기 (package index files 를 update 진행)
       upgrade - 업그레이드 실행  (기존 설치된 Package를 Upgrade 진행)
       install - 새 피키지 설치 (패키지 이름은 확장자를 제외함)
       remove - 패키지 제거 
       autoremove - 사용하지 않는 모든 패키지를 자동으로 제거 (거의 사용할일은 없음)
       purge - 패키지와 설정 파일을 함께 제거 (Package 중 종속된 Package가 있는 경우 같이 제거)
       source - 소스 압축 파일 다운로드
       build-dep - 소스 패키지의 빌드 의존성 설정 (의존성 검사후 설치진행)
       dist-upgrade - 배포판 업그레이드  
       dselect-upgrade - dselect 선택 따르기
       clean - 다운로드한 압축 파일 지우기
       autoclean - 다운로드한 압축 파일 중 오래된 것 지우기
       check -의존성이 깨진 패키지를 확인합니다
       changelog - 주어진 패키지의 바뀐 내용 목록을 다운로드한 후 표시
       download - 현재 디렉터리로 바이너리 패키지 다운로드
    
    Options:
      -h  이 도움말.
      -q  기록할 수 있는 출력 - 작업 알리미 없음
      -qq 올 이외의 메시지 표시하지 않기
      -d  압축 파일을 설치하거나 압축 해제하지 않고 다운로드만 하기
      -s  동작 없음. 명령 시뮬레이션 실행
      -y  모든 질문을 표시하지 않고 예라고 대답하기
      -f  망가진 의존성 패키지가 있는 시스템을 즉시 정정하려 합니다.
      -m  압축 파일을 찾을 수 없어도 계속 진행하도록 합니다
      -u  업그레이드한 패키지의 목록도 표시합니다.
      -b  소스 패키지를 가져온 후 빌드합니다
      -V  자세한 버전 번호 표시
      -c=? 지정한 설정 파일 읽기
      -o=? 임의의 옵션을 설정합니다, 예를 들어 -o dir::cache=/tmp
    더 자세한 정보는 apt-get(8), sources.list(5) and apt.conf(5) 메뉴얼 페이지
    를 확인하십시오.
    


    • apt-cache 기본기능
    이미 설치된/ 설치될 package 정보확인 및 package 의존성 등 다양한 부가 기능을 제공

    $ sudo apt-cache 
    Usage: apt-cache [options] command
           apt-cache [options] showpkg pkg1 [pkg2 ...]
           apt-cache [options] showsrc pkg1 [pkg2 ...]
    
    apt-cache is a low-level tool used to query information from APT's binary cache files
    
    Commands:
       gencaches - Build both the package and source cache
       showpkg - Show some general information for a single package
       showsrc - Show source records
       stats - Show some basic statistics
       dump - Show the entire file in a terse form
       dumpavail - Print an available file to stdout
       unmet - Show unmet dependencies
       search - Search the package list for a regex pattern
       show - Show a readable record for the package
       depends - Show raw dependency information for a package
       rdepends - Show reverse dependency information for a package
       pkgnames - List the names of all packages in the system
       dotty - Generate package graphs for GraphViz
       xvcg - Generate package graphs for xvcg
       policy - Show policy settings
    
    Options:
      -h   This help text.
      -p=? The package cache.
      -s=? The source cache.
      -q   Disable progress indicator.
      -i   Show only important deps for the unmet command.
      -c=? Read this configuration file
      -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp
    

    apt-get으로 설치된 package는 *.deb으로 되어있기때문에 dpkg 명령도 가능하며, dpkg기능도 설치 및 제거도 가능하지만 이곳에서 생략. 자세한 내용은 man or --help로 참조



    • add-apt-repository 
    apt command는 remote repository ,server를 가지고 있으며, /etc/apt/source.list or /etc/apt/souce.list.d/  에 관련 repository 주소와 설정을 담고 있다.


    $ add-apt-repository --help
    Usage: add-apt-repository 
    
    add-apt-repository is a script for adding apt sources.list entries.
    It can be used to add any repository and also provides a shorthand
    syntax for adding a Launchpad PPA (Personal Package Archive)
    repository.
    
     - The apt repository source line to add. This is one of:
      a complete apt line in quotes,
      a repo url and areas in quotes (areas defaults to 'main')
      a PPA shortcut.
      a distro component
    
      Examples:
        apt-add-repository 'deb http://myserver/path/to/repo stable myrepo'
        apt-add-repository 'http://myserver/path/to/repo myrepo'
        apt-add-repository 'https://packages.medibuntu.org free non-free'
        apt-add-repository http://extras.ubuntu.com/ubuntu
        apt-add-repository ppa:user/repository
        apt-add-repository multiverse
    
    If --remove is given the tool will remove the given sourceline from your
    sources.list
    
    
    Options:
      -h, --help            show this help message and exit
      -m, --massive-debug   명령줄에 많은 디버그 정보 출력
      -r, --remove          sources.list.d 디렉터레 안의 저장소 제거
      -k KEYSERVER, --keyserver=KEYSERVER
                            키 서버 주소입니다. 기본값: hkp://keyserver.ubuntu.com:80/
      -s, --enable-source   저장소에서 소스 패키지를 다운로드할 수 있도록 합니다.
      -y, --yes             모든 질의예 동의
    
    

      https://help.ubuntu.com/community/Repositories/Ubuntu


    1.2. APT 명령 / DPKG 명령 기본사용법

    • apt-get install/remove/purge package (package 설치/제거) 
    $ sudo apt-get install   pkg                      // pkg 패키지 설치
    $ sudo apt-get remove pkg                         // pkg 패키지 제거
    $ sudo apt-get purge pkg                          // pkg 는 물론 관련 패키지까지 삭제 (명령어가 생성)
    $ sudo apt-get source pkg                         // pkg source download
    


    오래된 Ubuntu Version는 purge가 remove에 포함되어있다.

    • apt-cache show/search package  (설치할 package 정보 및 검색) 
    $ sudo apt-cache show pkg                         // 설치할 pkg 패키지 정보
    $ sudo apt-cache search pkg                       // 설치할 pkg 패키지 검색
    


    • apt-cache depend package  (설치전 or 설치후 의존성확인 가능)
    설치는 되었지만, Package가 제대로 동작이 되지 않는다면, 이 의존성확인으로 확인하자.
    특히 현재 x86과 64bit version 충돌 발생할 수 있으며, 다른 문제도 발생할 수 있으니, 확인

    $ sudo apt-cache depends zlib1g-dev:i386  // 의존성확인 의 예 
    zlib1g-dev:i386
      의존: zlib1g:i386
     |의존: libc6-dev:i386
      의존: libc-dev:i386
        libc6-dev:i386
      충돌: zlib1-dev
      충돌: zlib1-dev:i386
      대체: zlib1g-dev
      망가뜨림: zlib1g-dev  
    


    1.2.1. apt-get update와 upgrade의 차이 


    • apt-get update 
    repository 주소정보가 있는 패키지 정보리스트( /etc/apt/source.list)에서 각 repository에서 package index file을 repository와 sync를 맞추는 작업일 뿐이다.  
    package을 설치는 package index file에 존재해야 설치가 가능하며, 이는 package 에는 영향을 미치지 않는다.

    - 관련파일 /etc/apt/source.list or /etc/apt/source.list.d


    • apt-get upgrade
    현재 설치된 package를 version upgrade하는 명령으로 설치된 package를 가능한 최신 version으로 변경하는 upgrade기능


    $ sudo apt-get update       //현재 Package index file을 repository와 sync (update)    
    $ sudo apt-get upgrade      // 설치된 패키지를 새버전으로 Upgrade.    
    


    • 주의사항 
    Ubuntu를 바로 설치했거나,  설치되어진지 오래되었다면 update 를 반드시 해야한다. 않을 경우 원하는 package 정보를 찾지 못하는 경우가 발생한다.


    2. Ubuntu의 repository 추가/삭제  

    Ubuntu에서는 처음 설치후 외부의 Repository를 통해 각각 Package를 추가 및 업그레이드를 진행을 한다.

    2.1. Ubuntu Version CodeName 알기 

    Android 처럼 Ubuntu역시 각각 Version마마 Code Name이 별도로 존재하며, 설정을 할때,이를 제대로 인지해야 무슨 Version인지 본인이 안다.

    • Ubuntu Release Version 과 Code Name 알기 
    1. 12.04 LTS precise
    2. 14.04 LTS trusty

      자세한 내용은 아래사이트 참고
      https://wiki.ubuntu.com/Releases


    2.2. Ubuntu Command를 통해 Repository 관리 

    add-apt-repository를 이용하여 repository 추가 및 제거가능하며, 추가된 사항을 상위 두곳의 source.list에서 확인가능


    • Repository의 주소 및 설정확인 
    1. /etc/apt/sources.list   repository 주소 추가  및 제거가능 
    2. /etc/apt/sources.list.d/file 형태로 repository 주소 추가 (ppa 사용시 이곳에 추가)

    • /etc/apt/source.list  설정 이해 
    4가지의 main repository 의 설정이며, 중복설정가능
    1. Main - Canonical-supported free and open-source software. (Ubuntu에서 제공하는 Open source)
    2. Universe - Community-maintained free and open-source software.(커뮤니티기반의 Open source)
    3. Restricted - Proprietary drivers for devices.(자산으로 인정하는 디바이스 드라이버 )
    4. Multiverse - Software restricted by copyright or legal issues.(라이센스/법적 제한된 소프트웨어)

    1번/2번은 Open source지만 안정성에서 보면 Ubuntu 기본제공과 유저기반제공
    3번은 Device Driver의 개발업체의 법적책임과 관리를 개발업체가 관리하지만, Package 제공
    4번은 라이센스 및 법적제한이 된 것으로 주의필요



    $ sudo vi /etc/apt/source.list
    deb http://kr.archive.ubuntu.com/ubuntu/ trusty main restricted       # package repository , trusty: ubuntu version 
    deb-src http://kr.archive.ubuntu.com/ubuntu/ trusty main restricted   # source repository 
    
    ## Major bug fix updates produced after the final release of the distribution. (내부 주석에 설명 trusty-updates)
    deb http://kr.archive.ubuntu.com/ubuntu/ trusty-updates universe      # package repository   
    deb-src http://kr.archive.ubuntu.com/ubuntu/ trusty-updates universe  # source repository    
    
    ## trusty-backports , 내부주석에 설명 
    deb http://kr.archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse
    deb-src http://kr.archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse
    

    • add-apt-repository  사용법

    lucid (Ubuntu 10.04)

    $ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
    $ sudo apt-get update
    $ sudo vi /etc/apt/sources.list 
    ## check your list 
    


    jaunty(Ubuntu 9.04)

    $ sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu/ jaunty multiverse"  
    $ sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu/ jaunty-updates multiverse" 
    $ sudo apt-get update
    $ sudo vi /etc/apt/sources.list  
       ## check your list  
    


    2.2.1. PPA(Personal Package Archives) 사용 

    add-apt-repository는 Repository를 추가시 PPA라는 기능을 제공하며, PPA's Launchpad page에서 찾어 아래의 format으로 Repository를 추가한다.
    결론적으로 직접 Repository 주소를 입력하는 것이 아니라 directory를 입력하며,실제주소는 위에서 언급했듯이 PPA's Launchpad page에서 찾는다.

    man을 읽어보면,  /etc/apt/sources.list 추가 되거나 /etc/apt/sources.list.d/file (full path사용)추가된다고 하며, GPG public key도 download된다고 한다.

    • PPA's Launchpad page 정보 
    $ ls /etc/apt/sources.list.d/
    brightbox-ruby-ng-trusty.list  docker.list                    git-core-ppa-trusty.list       git-core-ppa-trusty.list.save 
    
    $ vi /etc/apt/sources.list.d/brightbox-ruby-ng-trusty.list 
    deb http://ppa.launchpad.net/brightbox/ruby-ng/ubuntu trusty main
    # deb-src http://ppa.launchpad.net/brightbox/ruby-ng/ubuntu trusty main
    

    • 기본 사용예제 
    ppa:[username]/[ppaname] format 추가 (repository의 directory 추가)


    $ sudo add-apt-repository ppa:webupd8team/java
    $ sudo apt-get update  
    $ sudo vi /etc/apt/sources.list.d/...  
    


    • 공식 PPA 사이트
    아래사이트에서 ARCH에 따라 본인이 원하는 package를 검색해본다.
      https://launchpad.net/ubuntu/+ppas

    PPA for Ubuntu Korea Community
      https://launchpad.net/~ubuntu-ko/+archive/ubuntu/ppa

    기타예제
      http://ppa.launchpad.net/brightbox/ruby-ng/ubuntu/
      http://webdir.tistory.com/197


    2.3 Ubuntu GUI에서 Package 관리지원

    Window 처럼 자동 Upgrade 기능처럼 GUI에서도 이런 기능을 제공.

    • GUI에서 설정->소프트웨어&업데이트 확인가능 



      https://help.ubuntu.com/community/Repositories/Ubuntu

    3. 설치된 Package 관련정보분석 

    이미 Ubuntu의 설치된 Package들을 검색하고, 로그 분석하는 법을 알아보자.

    • dpkg package (설치된 package 정보 및 검색) 
    $ sudo dpkg -l                                    // 현재 전체 설치된 패키지 정보 , (시간검색이 안됨 ) 
    $ sudo dpkg -l  | grep pkg                        // 현재 설치된 패키지 검색
    

    • dpkg package (설치된 PKG 로그 분석) 
    package가 설치될 경우 아래와 같이 로그가 생성

    $ ls /var/log/dpkg.log*   // 설치된 Package의 로그들  
    /var/log/dpkg.log        /var/log/dpkg.log.11.gz  /var/log/dpkg.log.4.gz  /var/log/dpkg.log.7.gz
    /var/log/dpkg.log.1      /var/log/dpkg.log.2.gz   /var/log/dpkg.log.5.gz  /var/log/dpkg.log.8.gz
    /var/log/dpkg.log.10.gz  /var/log/dpkg.log.3.gz   /var/log/dpkg.log.6.gz  /var/log/dpkg.log.9.gz
    
    $ cat /var/log/dpkg.log | tail -n 30  // 최근 설치된 Package 로그확인 (*.deb 기준)
    
    $ cat /var/log/apt/history.log | tail -n 30  // apt history 로그확인


    • smbclient package를 설치했다고 아래와 같이 검색 
    $ grep install /var/log/dpkg.log                  // grep를 이용하여 install (설치된 패키지) 검색 , 설치된 시간이 검색가능 
    $ grep install /var/log/dpkg.log /var/log/dpkg.log.1
    $ ls /var/lib/dpkg/info/*.list  | grep smbclient    // smbclient package 설치된 Directory들을 확인가능 
    $ ls /var/cache/apt/archives/ | grep smb*           // 설치된 *.deb package를 찾아볼수 있다. 
    pkg: package name 

      https://unix.stackexchange.com/questions/12578/list-packages-on-an-apt-based-system-by-installation-date

    9/29/2014

    USB Cable로만 Linux 개발환경구축 (Exynos)

    1. USB Cable로만 개발환경구축

    Virtual Box를 개발 도중 , NFS 및 TFTBOOT BOOT 로 편하게 개발하고 싶은마음에,
    아래 검색도중 아래의 문서들을 발견하여 다음과 같이 정리

    ODROID(Embedded Linux 기반의 개발환경)

    현재 ODROID의 경우 USB기반의 Network를 이용하여 개발환경을 구축이 가능하다.
    이를 이용하기 위해서 Host Linux와 Device Linux의 설정을 알아보자.

    • 참고사항 (USB_NFS_HOWTO)
      http://www.aesop.or.kr/Board_Resources_General/36144
      http://www.aesop.or.kr/Board_Resources_General/36136
      http://www.aesop.or.kr/Board_Documents_Linux_Kernel/35302
      http://elinux.org/Mount_BeagleBoard_Root_Filesystem_over_NFS_via_USB
      http://com.odroid.com/sigong/nf_board/nboard_view.php?brd_id=odroidpc&bid=1032
      http://callgm.tistory.com/36
      http://vaultmicro.blogspot.kr/2013/04/usb-network-protocol.html
      http://recursive-labs.com/blog/2012/06/15/beaglebone-archlinux-gettingstarted/
      https://sites.google.com/site/computewiththinking/odroid-u2/bootloader-u-boot-fusing


    2. Uboot의 dnw명령 과 DNW Tool 

    uboot에 dnw라는 명령어가 존재하며 보통 TFTP 대신 목적으로 사용한다
    이는 현재 Exynos에서만 지원해주고 있는 것 같다.
    원리는 Taget Device의 uboot에서 OTG의 Device Mode 동작이 되고 Host Linux와 통신한다.
    이 때 uboot에서는 dnw 명령과 Host에서는 DNW Tool이 필요하다
    현재 Odroid인 경우 smdk-usbdl를 이용하여 Exynos를 지원해주고 있다.

    관련 Tool: Window 및 Linux 용이 존재.

    2.1 Host Linux용 DNW Tool 설치

    Host Linux에서 아래의 파일을 Download하고 아래와 같이 설치를 해주면

    • Linux-dltool.tar.gz Download 
      http://bumnux.tistory.com/m/4?category=306215


     $ sudo apt-get install libusb-dev
     $ sudo cp smdk-usbdl /usr/local/bin
     $ apt-get install libusb-0.1-4:i386   (for 64bit)
    

    이제 HOST Linux에서 smdk-usbdl를 이용하여 이제 uboot로 전송가능하다

    2.2  UBOOT의 DNW 개발환경설정 

    • Target Device에서 UBOOT dnw명령 확인 
    Serial 연결 후,  Reset 한 후, Uboot로 진입 한 후 dnw 명령 실행.
    Host에서  System MCU SEC S3C6400X Test B/D USB를 인식 가능하며 아래의 Virtual Box에도 설정을 해주자.

     Exynos4412 # dnw 0xC0008000 


    • Host에서 Virtual Box  관리자 설정      
    Main Virtual Box  관리자의  머신->설정->USB  추가

       System MCU SEC S3C6400X Test B/D [0100] 추가  (VID:04e8, PID: 1234)


    • Host에서 실행중 Virtual Box 확인
    UBOOT에서 dnw 실행 후,
    실행 중인  Virtual Box의 장치-> USB 장치 확인 및 앞에 체크 표시 확인
     
       System MCU SEC S3C6400X Test B/D [0100]


    2.3 Uboot의 dnw TEST 진행


    • Target Device에서 UBOOT 명령 실행

    아래와 같이 uboot에서 dnw 명령이 지원이 되어야 한다.

     Exynos4412 # dnw 0xC0008000 


    • Host Linux에서 Kernel Image Load 

    아래와 같이 smdk-usbdl을 이용하여 Kernel Image를 Load 해보자

    $ sudo smdk-usbdl -f arch/arm/boot/zImage -a 0xC0008000 
    SMDK42XX,S3C64XX USB Download Tool
    Version 0.20 (c) 2004,2005,2006 Ben Dooks 
    
    S3C64XX Detected!
    => found device: bus 001, dev 005
    => loaded 2311724 bytes from arch/arm/boot/zImage
    => Downloading 2311734 bytes to 0x40008000
    => Data checksum 26c6
    => usb_bulk_write() returned 2311734

    만약 Window에서 사용하고 싶다면, Window DNW Tool을 사용, 아래 참조 방법은 동일

    •  For Linux SMDK-USBDL
      http://www.fluff.org/ben/smdk/tools/
      http://dreamlog.tistory.com/165
    • for Window 7
      https://code.google.com/p/s3c6410kits/downloads/detail?name=dnw-for-
    win7.rar&can=2&q=
    • Window
      http://en.pudn.com/downloads74/sourcecode/others/detail269293_en.html
    • How to install on Linux
      https://code.google.com/p/dnw-linux/ 


    3. USB-CDC를 이용한 NFS 설정

    이제 UBOOT에서 Kernel을 USB를 통해가져오면,  USB-CDC Gadget을 이용하여 Host Linux에서 USB Network를 이용한다


    3.1 Target Device에서 Kernel설정

    우선 아래와 같이 USB-CDC Gadget Driver를 추가하여, USB로 Network가 가능하도록 하자.

    * KERNEL에서 RNDIS 및 USB Gadet Driver CDC추가와 NFS 지원 확인
    • 아래와 같이 Kernel 설정을 추가
    $ make menuconfig
    [ * ] File systems -> Network File System -> NFS client support 를 체크하고
    NFS client support for NFS version 3 및 Root file system on NFS 를 선택
    
    [ * ] Device Drivers -> USB support -> USB Gadget Support -> USB Gadget Drivers 
          (Ethernet Gadget (with CDC Ethernet support)) 로 변경 및 [*]  아래 RNDIS support (NEW) 확인 
    * Built-in으로 변경                                                                               
    • 확인사항
    $ vi .config
    CONFIG_IP_PNP=y
    CONFIG_IP_PNP_DHCP=y
    CONFIG_IP_PNP_BOOTP=y
    CONFIG_IP_PNP_RARP=y
    CONFIG_USB_USBNET=y
    CONFIG_USB_NET_SMSC95XX=y
    CONFIG_USB=y
    CONFIG_USB_SUPPORT=y
    CONFIG_USB_ARCH_HAS_EHCI=y
    CONFIG_NETWORK_FILESYSTEMS=y
    CONFIG_NFS_FS=y
    CONFIG_NFS_V3=y
    CONFIG_NFS_V3_ACL=y
    CONFIG_ROOT_NFS=y
    


    3.2 Host Linux에서 NFS Server 설정

    기본으로 NFS가 설치가 안되어있기에, NFS관련 PKG 설치 및 설정


    ~$ sudo apt-get install nfs-kernel-server nfs-common portmap
    ~$ sudo vi /etc/exports
    
           /home/jhlee/qtwork/tmp1 *(rw,no_root_squash,no_all_squash,sync)
           /home/jhlee/qtwork/tmp2 *(rw,no_root_squash,no_all_squash,sync)
    
    ~$ sudo /etc/init.d/portmap restart
    ~$ sudo /etc/init.d/nfs-kernel-server restart
    ~$ sudo /etc/init.d/portmap restart


    3.3 Host에서 Virtual Box 관리자 설정 

    Device에서 Kernel의 USB Gadget인 USB-CDC의 RNDIS를 이미 설치했기때문에,
    아래와 같이 이를 Host에서 인식하기 위해서 Virtual Box를 설정해준다.

    Kernel zImage를 적용 후, 다시 Image를 writing 을 한 후 USB 필터 추가

      * WINDOW RNDIS/Ethernet Driver는 필요가 없기에  취소 
      * VirtualBox USB Driver 가 문제가 있다면 아래의 연결에 문제 발생 (재설치)

    • Virtual Box  관리자 설정 
    Main Virtual Box  관리자의  머신->설정->USB  추가
             Linux 3.0.68 with s3c-udc RNDIS/Ethernet Gadget [0326] 추가

    • 실행중 Virtual Box 확인
    UBOOT에서 dnw 실행 후, 실행 중인  Virtual Box의 장치-> USB 장치 확인 및 앞에 체크 표시 확인

             Linux 3.0.68 with s3c-udc RNDIS/Ethernet Gadget [0326]


    3.4 Target Device에서 NFS 및 NETWORK TEST

    • NFS Mount TEST 
    TARGET 일반 부팅 후 아래와 같이 NFS TEST

     mount -t nfs 192.168.1.1:/home/jhlee/qtwork/tmp2 /tmp 

    그리고 lsusb로  연결확인

    • Network Test 
    Guest OS Linux
    $ ifconfig usb0 192.168.1.1
    
    TARGET
    # ifconfig usb0 192.168.1.2
    # ping 192.168.1.1 

    기본 동작 Exynos에서 동작은 하는데, TARGET에서 IP가 일정시간이 지나면 없어짐
    네트워크문제 발생


    4. Linux 개발환경설정 


    4.1 Host Linux에서 udev 설정

    Host Linux에서는 이제 udev 관련 rules들을 변경하여 Hotplug가 가능하도록 해주자.

    1. dnw 관련 uboot에서 tftpboot 처럼 이용하여 kernel Image를 Device로 전송
    2. Kernel은 USB-CDC의 Gadget을 이용하여 NFS를 Mount 한다

    • DNW Tool 설정 

    $vi  /etc/udev/rules.d/80-dnw.rules
    SUBSYSTEMS=="usb",  ATTRS{idVendor}=="04e8",  ATTRS{idProduct}=="1234", 
    RUN+="/usr/local/bin/smdk-usbdl  -a  0xc0008000  -f /tftpboot/zImage"

    • NFS 관련설정

    $ vi /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" 

    상위 파일 존재하고 이미 있다면, 아래부분만 추가 및 확인 ( NFS Restart )

    $ vi /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" 


    • USB0 Network 설정 및 network 재설정
    Host Linux에서 이제 아래와 같이 usb0의 HOST Server 주소를 고정해준다.
    usb0과 eth0을 NAT로 설정한다.

    $ vi /etc/newtowrk/interfaces
    auto lo
    iface lo inet loopback
    
    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 


    • iptable 사용법

      http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-sg-ko-4/s1-firewall-ipt-fwd.html

    4.2 Boot 환경설정 (Device)


    수정 전 boot.scr
    setenv initrd_high "0xffffffff"
    setenv fdt_high "0xffffffff"
    setenv fb_x_res "1280"
    setenv fb_y_res "720"
    setenv hdmi_phy_res "720"
    setenv bootcmd "fatload mmc 0:1 0x40008000 zImage; fatload mmc 0:1 0x42000000 uInitrd; bootm 0x40008000 0x42000000"
    setenv bootargs "console=tty1 console=ttySAC1,115200n8 fb_x_res=${fb_x_res} fb_y_res=${fb_y_res} hdmi_phy_res=${hdmi_phy_res} root=UUID=e139ce78-9841-40fe-8823-96a304a09859 rootwait ro mem=1023M"
    boot


    수정 후 boot.scr
    setenv initrd_high "0xffffffff"
    setenv fdt_high "0xffffffff"
    setenv fb_x_res "1280"
    setenv fb_y_res "720"
    setenv hdmi_phy_res "720"
    setenv serverip  "192.168.1.1"
    setenv ipaddr  "192.168.1.2"
    setenv gatewayip  "192.168.1.1"
    setenv bootcmd "dnw  0xc0008000; fatload mmc 0:1 0x42000000 uInitrd; bootm 0xc0008000 0x42000000"
    setenv bootargs "console=tty1 console=ttySAC1,115200n8 fb_x_res=${fb_x_res} fb_y_res=${fb_y_res} hdmi_phy_res=${hdmi_phy_res} root=/dev/nfs  rw  nfsroot=192.168.1.1:/home/jhlee/qtwork/tmp2 
    ip=192.168.1.2:192.168.1.1:192.168.1.1:255.255.255.0::usb0:off init=/init  mem=1023M"
    boot
    
    
    
    
    setenv  serverip  192.168.1.1;setenv  ipaddr  192.168.1.2;setenv  gatewayip  192.168.1.1