GIT 사용하는 이유

  • 개발하는 소스에 대해 버전 관리
  • 개발 완료된 플젝에 대한 유지 보수
  • 다수의 개발자가 하나의 플젝에 접근하여 개발할 때 버전 관리

Repository

  • 프로젝트 소스와 변경사항 로그 저장
  • Bin 파일도 저장 가능
  • Trunk: 프로젝트 메인 줄기로 실제 개발되는 곳
  • Branches: Trunk에서 분기하는 프로젝트로 따로 개발 진행되는 곳
  • Tags: Trunk의 소스가 릴리즈 되는 시점에서 복사되어 해당 릴리즈 표기를 하여 보관하는 곳

GIT 구성도

  • workspace, index, local repository, remote repository
    명령어를 통해 위 보관장소 이동 - 파일 R/W

GIT 실습

  1. subl ./ 후 코드 수정
  2. git status
  3. git add ./
  4. git status
  5. git commit -m "blabla"
  6. git status
  7. git log
  8. git log --oneline
  9. git config --global user.name "sunshine0070"
  10. git config --global user.email "sunshine0070@gmail.com"
  11. Desktop에서, mkdir alpha, cd alpha
  12. mkdir data
  13. printf '1234' > data/number.txt
  14. printf 'a' > data/letter.txt
  15. tree
  16. git init
  17. ls -a
  18. git add./
  19. git commit -m "init commit"
  20. git log --oneline
  21. subl . 들가서 코드 수정 (a아랫줄 b 추가)
  22. git diff
  23. git commit -a -m "add b"
  24. git log --oneline
  25. echo "password" > passwd
  26. echo passwd > .gitignore (passwd 다른데서 추적 불가하게)
  27. subl ./data 들가서 코드 수정 (b->C)
  28. git commit -a -m "b->C"
  29. git log --oneline
  30. rm -r * (복원하기전에 다 지우기)
  31. ls (다 지워졋나 확인)
  32. git checkout 6c27d1e~1 (git log --oneline에서 확인한 해시값 + '~1')
  33. ls (복원됫나 확인, passwd 파일은 사라짐 - branch 때문?)
  34. git branch newbranch
  35. git checkout newbranch (사용하고 있던 branch 바뀜)
  36. subl ./data 들가서 코드 수정 (b아래 DDD 추가)
  37. git commit -a -m "add DD"
  38. git checkout master (master branch로 바뀜)
  39. git branch (현재 가지고 있는 branch 나열)

MDS2450 보드 다시 세팅

  • minicom 터미널 file에서 따로 열기 (색깔 구별)

  • m 눌러서 minicom 실행 (alias 되어잇음, 안되면 tail ~/.bashrc 들가서 alias m='minicom -w -D/dev/ttyS0' 확인, 바꿨으면 source ~/.bashrc 로 bashrc 파일 적용해야함)

  • ifconfig - eth1 연결확인, asix 연결확인, eth1 아니고 eth2이면 reinit

  • tar zxf ~/Documents/MDS2450/m2450.tar.gz (m2450 없는사람 압축풀기)

  • cd Desktop/m2450/docs/02.M2450_보드자료/

  • ./getBootEnv2 192.168.0.2

  • 부트로더 프롬프트 상태 들가서 아래 2개 붙여넣기

  • set bootargs 'mem=64M root=/dev/nfs rw nfsroot=192.168.0.2:/usr/local/arm-2010q1/arm-none-linux-gnueabi/sys-root ip=192.168.0.3:192.168.0.2:192.168.0.1:255.255.255.0::eth0:off console=ttySAC1,115200n81'
    set gatewayip 192.168.0.1
    set netmask 255.255.255.0

  • set ipaddr 192.168.0.3
    set serverip 192.168.0.2
    set bootcmd 'tftp 0xC0008000 uImage-m2450;bootm 0xC0008000'
    set boot test (한번에 안돼서 나눠서 붙여넣음)

  • 아래 두줄은 직접 작성
    MDS2450# set bootdelay 1
    MDS2450# save

  • 코드 한 줄 깨져서 붙여넣어져서 다시 넣음
    MDS2450# set bootcmd 'tftp 0xC0008000 uImage-m2450;bootm 0xC0008000'
    MDS2450# save

  • 미니컴 터미널 보면 중간에 뭔가 안됌(커널 문제?)

  • cd /opt
    ls (확인)
    sudo mv arm-2010q1/ /usr/local/
    cd /usr/local/arm-2010q1/arm-none-linux-gnueabi/
    ls (확인)
    cd sys-root/
    ls (확인)
    pwd | pbcopy (클립보드 복사)
    sudo vim /etc/exports (맨아래 /usr/local/arm-2010q1/arm-none-linux-gnueabi/sys-root 추가)
    sudo vim /etc/exports (맨아래 빼고 다 주석처리)
    sudo vim /etc/exports (맨아래 /usr/local/arm-2010q1/arm-none-linux-gnueabi/sys-root *(rw,sync,no_root_squash,no_subtree_check) 로 수정)
    sudo /etc/init.d/nfs-kernel-server restart

  • 리셋 누르면 해결되어있음
    root@mds2450:~#
    root@mds2450:~#
    root@mds2450:~#
    root@mds2450:~#
    리눅스 커널모드 돌입?

  • user@linux:~/Desktop$ cd /tftpboot/
    user@linux:/tftpboot$ ll
    후에 나오는
    -rwxrwxr-x 1 nobody user 4052624 Sep 10 2016 uImage-m2450* <- 리눅스 커널 프로그램

U-BOOT 환경변수

  • user@linux:~/Desktop/m2450/docs/02.M2450_보드자료$ ./getBootEnv2 192.168.0.2 # 커맨드 쳤을때 나오는 셋팅 환경에 대한 설명
  • gatewayip = 192.168.0.1 # ip v4
  • netmask = 255.255.255.0
  • ipaddr = 192.168.0.3 # 보드의 ip
  • serverip = 192.168.0.2 # 호스트의 ip
    커맨드 예시)
  • bootcmd = tftp 0xC0008000 uImage-m2450;bootm 0xC0008000
  • bootcmd = tftp 30000000 MDS2450.bin; go 30000000
    #C0008000 - C로 시작하면 가상주소, 물리적으로는 30000000이랑 같은 주소
  • bootargs = mem = 64M root=/dev/nfs rw nfsroot=192.168.0.2:/usr/local/arm-2010q1/arm-none-linux-gnueabi/sys-root # 리셋 한번만 눌러도 알아서 설정되는 NFS 사용하기 위해, /.../sys-root는 윈도우 c 드라이브 경로 같은 느낌, 즉 임베디드 리눅스 디폴트 경로, 리눅스 디폴트 경로는 cd 쳐서 들어가는 곳, 다른 곳임
  • ip=192.168.0.3:192.168.0.2:192.168.0.1:255.255.255.0::eth0:off console=ttySAC1,115200n81 # ttySAC1 은 장치식별자, 115200n81: 보드레이트 115200, no parity, 데이터비트 8비트, 스탑비트 1비트

NFS

  • 임베디드용 프로그램을 확인하려면 호스트에서 컴파일한 실행파일이 보드 램에 로드되어야 함, 근데 컴파일할 때마다 새로 생긴 실행파일을 램에 로드하는 건 번거로운 일(이 로딩을 다른 말로 보드의 램이 호스트에 mount하여 업데이트 한다고함), NFS는 네트워크를 통해 이를 가능하게 함 - 프로그램 개발 용이

임베디드 리눅스 부팅 과정

  • 메모리 컨트롤러 세팅을 위한 최소한의 부팅 프로그램 BL1(MLO)이 먼저 실행
  • 메모리 컨트롤러 세팅으로 사이즈가 큰 메모리에 접근하게 되면 BL2 프로그램(U-BOOT.img) 실행

출력버퍼

while(1)
{
    sleep(1);
    printf(".")
}

.... 안나옴
이유는 코드가 출력되는 순서는 코드 -> 출력버퍼 -> 출력장치 인데
출력버퍼를 끝내고 출력장치로 내보내기 위해서 \n 필요

while(1)
{
    sleep(1);
    printf(".\n")
}
.
.
.
이렇게 나오는데 ...을 원하면 강제로 출력버퍼 끝내는 코드 삽입하면 됌
while(1)
{
    sleep(1);
    printf(".")
    fflush(stdout);
}
  • 실행 프로그램 백그라운드 돌리기
    프로그램 실행 중에 (... 찍히고 있을 때) ctrl+z(프로그램 중지) 후 bg
    백그라운드라서 ctrl+c로 취소 불가, fg 치면 가능, ps -l로 프로그램 sTop/Run 확인 가능, pid 확인하고 kill pid로 프로그램 취소

커널에 프로그램 올리기

  1. vim ~/.bashrc
  2. shift+g 해서 아래에 추가
    PATH=$PATH:/usr/local/arm-2010q1/bin # path 따로 필요
    export ROOTFS=/usr/local/arm-2010q1/arm-none-linux-gnueabi/sys-root # sys-root는 임베디드 리눅스 디폴트 경로, 자주 들가니까 아예 매크로 설정
    shift+zz 저장후 나가기
  3. source ~/.bashrc # bashrc 변경사항 적용
  4. user@linux:~/Desktop$ cd $ROOTFS/root # sys-root안에 root로 이동
  5. sudo mv ~/Desktop/elp . # root 안에 elp 디렉토리 옮겨놓기
  6. sudo chmod 777 /usr/local/arm-2010q1/arm-none-linux-gnueabi/sys-root/root # 권한거부 계속 뜨니까 아예 설정바꿈
  7. user@linux:/usr/local/arm-2010q1/arm-none-linux-gnueabi/sys-root/root$ gcc -o hello hello.c # hello 실행파일 생성
  8. ./hello # 호스트 리눅스에서 실행 확인
  9. arm-none-linux-gnueabi-gcc -o hello hello.c # 크로스 컴파일
  10. 커널 창에서 확인
    root@mds2450:~# ls
    audio elp hello hello.c sdl test video
    root@mds2450:~# ./hello

주요 디렉토리 위치

  1. cd /usr/local/arm-2010q1/
  2. find ./ -iname 'stdio.h'
  3. cd arm-none-linux-gnueabi/libc/usr/include/ ; ls (표준 헤더파일 위치) ...

/usr/local/arm-2010q1/bin (툴체인 위치)
/usr/local/arm-2010q1/arm-none-linux-gnueabi/libc/usr/include/ (표준 헤더파일 위치)
/usr/local/arm-2010q1/arm-none-linux-gnueabi/libc/usr/lib/ (라이브러리 위치)
/usr/local/arm-2010q1/arm-none-linux-gnueabi/sys-root (sys-root 위치)

  1. find ./ -iname 'libc.*'
  • 라이브러리는 한 곳에 있지 않고 흩어져 있다. 다이어트 시킨 라이브러리, 안 시킨 라이브러리 각각이 필요할 때가 있기때문
profile
Backend Web Developer

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN