이미 SSH 설치 와 기본 Upgrade 및 기본 설정을 완료한다.
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 받아 설치하면된다.
* Codesourcery version (Window지원)
https://www.mentor.com/embedded-software/codesourcery
* Linaro version
https://wiki.linaro.org/WorkingGroups/ToolChain
빌드 옵션 및 새로운 기능확인
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 별로 설치 방법이 다르기때문에, 아래의 사이트를 반드시 참조를 하자.
http://processors.wiki.ti.com/index.php/Sitara_Linux_SDK_64_Bit_Ubuntu_Support
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
https://ahyuo79.blogspot.com/search/label/Uboot
https://www.denx.de/wiki/DULG/UBootScripts
http://www.denx.de/wiki/view/DULG/LinuxBootArgs
http://www.denx.de/wiki/view/DULG/UBootEnvVariables
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
$ 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
$ 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 설정의 예이다.
- NFS Debugging 원하면, nfsrootdebug
- Mount 시점을 늦추고 싶다면, rootdelay=4 사용하자.
- earlyprintk를 사용하면, KERNEL CONFIG의 Kernel hacking->Early printk 체크를 했다면, 사용하자.
- 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 -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
$ cat /proc/filesystems | grep nfs
nodev nfs
nodev nfs4
nodev nfsd
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로 설치하면된다.
$ 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 연결상태를 가능한데, 만약 네트워크 드라이버를 이용하지 않는다면 아래와 같이 연결상태를 확인 가능하다.
일반적인 경우
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
명령을 잘 실행했습니다.
네트워크 문제가 있다면 이를 삭제하고 이를 재 연결을 해보자.
C:\Users\JHLEE>net use \\192.168.1.100\homes /delete
6.3 Samba 기타 문제사항
만약 상위 설치도중(apt-get install samba) 웹주소가 제대로 안된다면,반드시 상위 apt-get update 이용후 다시 시도하자
연결이 잠시는 되고 디렉토리도 들어가지만, 잠시후 아래 Message와 함께 접속이 끊기는 현상
apt-get upgrade 후 다시 시도
http://idchowto.com/?p=34206
http://nicejhong.tistory.com/entry/Ubuntu-Getting-Started-with-Virtual-box