SlideShare a Scribd company logo
1 of 60
Download to read offline
제로부터
시작하는
Git
두번째 이야기
중앙대학교
의료보안연구소
Mario Cho(조만석)
hephaex@gmail.com
Mario Cho
Development Experience
◆ Image Recognition using Neural Network
◆ Bio-Medical Data Processing
◆ Human Brain Mapping on High Performance
Computing
◆ Medical Image Reconstruction
(Computer Tomography)
◆ Enterprise System
◆ Open Source Software Developer
◆ OPNFV (NFV&SDN) & OpenStack
◆ Machine Learning (TensorFlow, Torch, Leaf)
Cognitive Artificial Intelligence for Medicine
◆ Machine Learning
◆ Medical Informatics of oncology
Book
◆ Unix V6 Kernel
Mario Cho
hephaex@gmail.com
Contents
Git 이란?
왜 Git을 ?
Github 계정을 만들어보자!
Git 실습
Basic
Git 이해하기
Git 실습
Advanced
OpenSoruce
활동
III. install local terminal
• http://www.putty.org 에 접속해서
III. install local terminal
III. Open local terminal using putty or term
• Windows 환경: putty 를 설치하고, 창을 열어 192.168.56.10 으로 접속합니다.
• OSX 환경: 터미널을 열어 $ ssh 192.168.56.10 –l ubuntu 로 접속합니다.
IV. Install git
• Git을 설치하자
– $ apt-get install git-core
• 도커를 설치해서 파이선 환경(jupiter notebook)을 준비하자.
– $ wget -qO- https://get.docker.com/ | sh
– $ sudo usermod -aG docker ubuntu
• 로그 아웃한 뒤 재 접속.
IV. Jupiter Notebook 환경 준비
• 도커를 설치해서 파이선 환경(jupiter notebook)을 준비하자.
– $ wget -qO- https://get.docker.com/ | sh
– $ sudo usermod -aG docker ubuntu
• 로그 아웃한 뒤 재 접속.
github 실습
1. Git 환경
-> 가상화 환경으로 리눅스 설치
2. Github 회원 가입
3. git 실습 (basic)
-> https://www.github.com
-> 리눅스 터미널 환경(cli) 실습
git 실습: github 회원가입
• 웹브라우저를 열고 (익스플로러, 크롬, 파이어폭스, 사파리등)
• https://github.com 에 접속
git 실습: github 회원가입
• Sign up 을 클릭
• Step1:사용자이름, 이메일, 접속 암호를 입력후 create an
account
git 실습: github 회원가입
• Step2: Choose your plan
• Unlimited public repositories for free 선택후 Continue
git 실습: github 회원가입
• Step3: Tailor your experience
• Submit 하거나 skip this step
git 실습: github 회원가입
• Final step: 이메일 확인
• Verify email address 클릭하거나 링크를 붙여 놓고, 열기
git 실습: github 회원가입
• 이제부터 나도 Github 회원!
git 실습: github 회원가입
• github에 새로운 저장소도 만들 수 있지!
github 실습
1. Git 환경
-> 가상화 환경으로 리눅스 설치
2. Github 회원 가입
3. git 실습 (basic)
-> https://www.github.com
-> 리눅스 터미널 환경(cli) 실습
Step0: 실습 진도 체크
• https://docs.google.com/spreadsheets/d/1gU9WgFIb5LxTVrF
XWi4gPdsEI-uXHy4jvYhW7JXaGDI/edit?usp=sharing
Step0: github 계정 설정
1) putty 를 열어서 192.168.56.10 에 접속
2) 로그인
-ID: ubuntu
- Password: ubuntu
자신의 github 계정, 이메일과 이름 입력
$ git config –global user.email xxx@xxx.com
$ git config –global user.name “XXX”
Step0: 기본 명령어
# git add README.md
# git commit -m “README.md add”
# git pull origin master
# git push origin master
• 로컬 저장소에 새로운 자료 (역사,history)를 추가
• 새로운 자료에 대한 내용을 쓰기
• 원격(주로 github)에서 최신 자료를 받아서(Pull) 동기화하기
• 로컬에서 추가하거나 바뀐 자료를 원격 저장소에 올리기(Push)
Step0: github 계정 설정
• Git 계정에서 만들었던 저장소를 로컬로 불러서 저장하기.
$ git clone https://github.com/hephaex/git-psu.git
Step1: Git init
• 사용자 기본 폴더로 이동하자
– $ cd ~
• 실습할 play-git 폴더를 만들자.
– $ mkdir play-git
• play-git 폴러로 이동하자
– $ cd play-git
• 해당 폴더를 git 초기화
– $ git init
GIT 상태 확인 명령어
(중간중간 수시로 확인하자)
$ git show
$ git log
$ git diff
$ git status
Step1: 첫커밋하기
• 파일을 만들어 보자.
– $ touch git-ex1.txt
• 만들 파일을 git에 추가하자.
– $ git add git-ex1.txt
• 첫 커밋 하기
– $ git commit –m “first git commit”
GIT 상태 확인 명령어
(중간중간 수시로 확인하자)
$ git show
$ git log
$ git diff
$ git status
Step1: 첫커밋하기
• 파일을 만들어 보자.
– $ touch play-git.txt
• 만들 파일을 git에 추가하자.
– $ git add play-git.txt
• 첫 커밋 하기
– $ git commit –m “first git commit”
GIT 상태 확인 명령어
(중간중간 수시로 확인하자)
$ git show
$ git log
$ git diff
$ git status
Step2: 내용을 바꾸어 보기
• 상태를 확인한다.
– $ git status
• git-ex에 있는 step1.txt를 복사한다.
– $ cp ~/git-ex/step1.txt .
• step1.txt를 로컬 저장소에 추가한다.
– $ git add step1.txt
– $ git commit –m “step1.txt add”
GIT 상태 확인 명령어
(중간중간 수시로 확인하자)
$ git show
$ git log
$ git diff
$ git status
Step2: 내용을 바꾸어 보기
• step2.txt 를 step1.txt 로 덥어쓴다.
– $ cp ~/git-ex/step2.txt step1.txt
• 바뀐 step1.txt 를 git으로 추가한다.
– $ git add step1.txt
GIT 상태 확인 명령어
(중간중간 수시로 확인하자)
$ git show
$ git log
$ git diff
$ git status
Step2: 내용을 바꾸어 보기
• 내용이 바뀌었다면 add하자.
– $ git add step1.txt
• 바뀐 step1.txt를 commit 하자.
– $ git commit –m “step1.txt change”
• 지금까지 commit 한 것을 확인하자
– $ git log
GIT 상태 확인 명령어
(중간중간 수시로 확인하자)
$ git show
$ git log
$ git diff
$ git status
Step3: sign을 추가해서 commit 하기
• git-psu에 있는 step3~7.py를 복사한다.
– $ cp ~/git-psu/step*.py .
• step3.py를 로컬 저장소에 추가한다.
– $ git add step3.py
• 서명과 함께 commit 한다.
– $ git commit –sm “step3.py: print welcome”
• * 서명은 오픈 소스 라이센스를 올바르게 이해하고 commit을
한다는 의미,
• **리눅스 커널에서 commit을 공식으로 만들 때 이용
Step4: 원격 저장소를 만들어보자.
• Github에 로그인 합니다.
• 맨위에 +를 클릭하고 Create Repository를 선택합니다. Create Repository
Step4: 원격 저장소를 만들어보자
• Create a new repository에서 Repository name을 입력하자
– Ex) pnu
• Description에는 이 저장소의 “무엇에 쓰는 것인지” 적자.
• Create repository 를 클릭해서 새로운 저장소를 만들자.Create repository
Create repository
Step4: 원격 저장소를 만들어보자
• 원격 저장소의 주소를 복사해 놓자.
– CTRL+C
Step4: 원격 저장소를 만들어보자
• 원격 저장소의 주소를 복사해 놓자.
– CTRL+C
Step5: 원격 저장소에 자료를 올리자.
• 리눅스 터미널로 돌아가서
• 방금전 복사한 URL (github 원격저장소)를 로컬에 등록하자.
– $ git remote add origin https://github.com/hephaex/pnu.git
Step5: 원격 저장소에 자료를 올리자.
• Github 원격저장소로 자료를 올리자(Push).
– $ git push origin master
• Github 웹페이지를 열고 확인하자.
Step5: 원격 저장소에 자료를 올리자.
Step6: 원격 저장소에서 자료를 받아오자.
• Github 웹페이지를 열고. https://github.com/hephaex/git-pnu.git 를 보자.
– https://github.com/hephaex/git-pnu.git
• 자신의 로컬 저장소에 자료를 받아보자.
– $ cd ~
– $ git clone https://github.com/hephaex/git-pnu.git
• ls 명령으로 저장된 정보를 확인해 보자.
오픈 소스 프로젝트 찾기
1. 구글링
2. 오픈소스 커뮤니티에서 프로젝트 찾기
• The Apache Software Foundation(ASF)
• Jboss
• GitHub
• BitBucket
• Google Code
• CodeProject
• Sourceforge
공개 SW 포털 (http://www.oss.kr)
오픈 소스 저장소: https://github.com
리눅스 커널을 공부하기 전에 대상과 어떤 것을 분석할지 목표를 분명히 합니다.
아울러 target device도 함께 정합니다. (추천 라즈베리 파이2)
- kernel boot process
- boot loader에서 부터 시작해서 하드웨어 초기화, 메모리 초기화, 인터럽트 설정,
- init process 에 이르는 일련의 과정을 분석.
- 내용이 많지만, 하드웨어, 커널에서 사용하는 주요 메크로, 알고리즘을 배울 수
있음.
- mm_init() 분석
- start_kernel()에 보면 메모리를 초기화 하는 mm_init()이 있습니다.
- 리눅스 커널은 buddy와 slub을 이용해서 메모리를 관리합니다.
- buddy와 slub이 어떻게 초기화 되고 커널에 메모리 초기호/할당/제거 를 분석
- Device Driver 분석
- GPIO 디바이스를 분석하고 라즈베리 파이2를 이용해서 실험
- network 디바이스를 분석해서 network stack을 심화
- 그외 스케쥴러 분석 등등.
I. 오픈소스(커널)를 공부하기 위한 목표 설정
II. 오픈소스(커널)를 공부하기 위해 필요한 것들
- Note PC or Desktop or Cloud connection
- Editor : Vim, Emacs, ???
- Tools: ctags, gtags, cscope, …
- 참고 서적
- AP Manual
- ARM Cortex A Series Programmer Guide
- ARM Cortex A15 Technical Reference Manual
- kernel 분석에 필요한 AP user manual (가장 중요하지만, , , )
- DTB (Device Tree Blob)
- Power ePAPR_APPROVED_v1.1
- Kernel 책들
- UNIX V6 로 배우는 커널의 원리와 구조 (운영체제에 대한 근본원리)
- 코드로 알아보는 ARM 리눅스 커널 (2.6.x 커널 기준)
- 리눅스 커널 해설 (2.6.x 커널)
- 어셈블러
- GNU : GNU Assembler Directive
- GNU : GNU Assembler Manual
- GNU : GNU Linker Manual
커널은 코드의 양이 크기 때문에 (약 1500만 라인) 많은 지식을 필요로 하고,
많은 시간을 걸쳐서 하는 개발자 마라톤과 같은 부분이 있으므로 꾸준히 공부할 동료
가 필요합니다.
1. 함께 공부할 친구를 찾는다. (개발자 커뮤니티)
2. 오픈 소스 스터디에서 존칭을 사용 (상호 존중)
3. 오픈 소스 스터디에 부담 주는 행동 자제. (한사람이 부담을 주는 행동들…)
4. 커널에 맞는 구하기 쉬운 디바이스 선정 (라즈베리 파이 2? or 3?)
5. 꾸준히 공부 할 수 있는 공간
6. 스터디 내용을 공유할 수있는 인터넷 공간 (커뮤니티 게시판, 공유 문서)
II. 오픈소스(커널)를 공부할 때 Ground Rule
III. 이론 공부 시작 Let’s Start!!!
1. 각자 다른 배경의 사람들이 커뮤니티에 있으므로
서로간의 눈 높이를 맞추기 위해서
이론서를 함께 읽습니다.
2. 이론서는 얇은 책으로…
3. 라운드 로빈 방식으로 서로 조금씩 돌아가면서
읽습니다.
III. 이론 공부: Linux info from the source
IV. 소스 코드 분석
장소: 대학교 강의실, 토즈
(?)
방법:
- 소스 코드 드라이빙
- 소스 코드를 보면서 토론.
- 인터넷 공유 문서
(구글 doc) 등으로
자료 공유
IV. Linux Kernel build up
vmlinux
Image
piggy.S
piggy.gz
piggy.o
head.o
misc.o
head-cpu.o
head-board.o
vmlinux
zImage
RAW kernel
Executable
(ELF object)
Stripped Kernel
binary
(binary Object)
Compressed
Kernel binary
objcopy gzip as ld objcopy
Asm wrapper
piggy.gz
+
bootstrap code
위치
arch/arm/boot/co
mpressed
Composite
Kernel Image
(ELF Object)
Boot loader 용
Kernel Image
- Make를 통해서 커널 소스 코드를 컴파일후 kernel image가 만들어지는 과정
Boot Loader -> start_kernel()
• Start_kernel()은 init 프로세스가 동작할 때까지 커널을 초기화합니다.
• 코드는 init/main.c 에 정의합니다.
IV. 소스 코드 분석의 예 :start_kernel()
IV. 소스 분석: tag를 이용해서 함수를 추적
리눅스 커널 개발을 위한 여러가지 도구제공
- ctags. gtags. cscope, …
예) start_kernel()->mm_init()->mem_init()
V. 커뮤니티 활동 : 공유 (기계학습)
V. start_kernel() 주요기능
start()_kernel()
- smp_setup_processor_id();// physical CPU 0 (가칭) 으로 boot 진행
- cgroup_init_early(); // cgroup을 사용하기 위한 구조체 초기화
- boot_cpu_init(); // 현재 cpu(core id)를 읽어서 cpu_XXX_bits를 설정함
- setup_arch(); // dtb를 읽어서 메모리 블록과 영역 초기화
- page_alloc_init(); // cpu_chain에 page_alloc_cpu_notify를 연결
- mm_init(); // 메모리 블록에서 buddy초기화 후 stub 초기화
- sched_init(); // scheduller가 사용하는 구조체 초기화, init_task설정
- rcu_init(); // rcu자료 구조, bh, sched, preemt 초기화
- early_irq_init(); // irq_desc 0~15까지 object를 할당 받고 초기화
- init_IRQ(); // GIC, COMBINNER가 사용할 메모리 할당과 자료 구조 설정
- call_function_init(); // 각 cpu core에서 사용할 call_single_queue 초기화
- pidmap_init(); // pidmap 초기화
- rest_init() // init_process (PID 1번) 실행을 위한 초기화 후실행
start()_kernel()->mm_init()->mem_init()->free_all_bootmem()->free_all_bootmem_core(bdata)-
>__freepages_bootmem(pfn_to_page(start),order)
bootmem으로 관리하던 메모리를 buddy로 바꾸는 과정입니다.
- while (start < end) {
- shift = idx & (BITS_PER_LONG - 1);
- if (IS_ALIGNED(start, BITS_PER_LONG) && vec == ~0UL) {
__free_pages_bootmem(pfn_to_page(start), order);
// CPU0의 vm_event_states.event[PGFREE] 를 32로 설정함
// page에 해당하는 pageblock의 migrate flag를 반환함
// struct page의 index 멤버에 migratetype을 저장함
// struct page의 _count 멥버의 값을 0 으로 초기화함
// order 5 buddy를 contig_page_data에 추가함
// (&contig_page_data)->node_zones[ZONE_NORMAL].vm_stat[NR_FREE_PAGES]: 32 로 설정
// vmstat.c의 vm_stat[NR_FREE_PAGES] 전역 변수에도 32로 설정
count += BITS_PER_LONG;
start += BITS_PER_LONG;
} else { // node_bootmem_map[0]의 값이 0아닐 경우
while (vec && cur != start) {
if (vec & 1) {
__free_pages_bootmem(page, 0);
// CPU0의 vm_event_states.event[PGFREE] 를 1로 설정함
// page에 해당하는 pageblock의 migrate flag를 반환함
// struct page의 index 멤버에 migratetype을 저장함
// struct page의 _count 멥버의 값을 0 으로 초기화함
// order 0 buddy를 contig_page_data에 추가함
// (&contig_page_data)->node_zones[ZONE_NORMAL].vm_stat[NR_FREE_PAGES]: 1 로 설정
// vmstat.c의 vm_stat[NR_FREE_PAGES] 전역 변수에도 1로 설정
count++;
}
}
V. 커뮤니티 활동: 소스 코드 분석 공유
VI. 커뮤니티 활동: 궁금하면 물어보자.
VII. 커뮤니티 활동: 아는 것을 알려주자.
VII. 커뮤니티 활동: 아는 것을 알려주자.
VIII. 커뮤니티 활동: 잘못 된것을 발견하면 수정
VIII. 커뮤니티 활동: 수정한 것을 함께 리뷰
IX. 커뮤니티 활동: 개선 결과 반영
Appendix #1: Markdown
Appendix #2: ROS
• ROS Robot Operating System
Thanks you!
Q&A

More Related Content

What's hot

Linux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario ChoLinux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario ChoMario Cho
 
[NDC16] Effective Git
[NDC16] Effective Git[NDC16] Effective Git
[NDC16] Effective GitChanwoong Kim
 
오픈소스 공헌을 위한 필수 지식
오픈소스 공헌을 위한 필수 지식오픈소스 공헌을 위한 필수 지식
오픈소스 공헌을 위한 필수 지식Matthew (정재화)
 
Git 더하기 GitHub(구름IDE 환경)
Git 더하기 GitHub(구름IDE 환경)Git 더하기 GitHub(구름IDE 환경)
Git 더하기 GitHub(구름IDE 환경)Junyoung Lee
 
리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리Seungyong Lee
 
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git민태 김
 
파일시스템 관련 명령어
파일시스템 관련 명령어파일시스템 관련 명령어
파일시스템 관련 명령어Chulgyu Shin
 
버전관리시스템 종류와 소개
버전관리시스템 종류와 소개버전관리시스템 종류와 소개
버전관리시스템 종류와 소개Jong-il Seok
 
Git 입문자를 위한 가이드
Git 입문자를 위한 가이드Git 입문자를 위한 가이드
Git 입문자를 위한 가이드chandler0201
 
깃허브 시작하기
깃허브 시작하기깃허브 시작하기
깃허브 시작하기진태 이
 
GitHub 실습 교육
GitHub 실습 교육GitHub 실습 교육
GitHub 실습 교육승엽 신
 
Git의 개념과 사용
Git의 개념과 사용Git의 개념과 사용
Git의 개념과 사용환민 홍
 
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+github
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+githubGit 더하기 GitHub(Git클라이언트 활용) / Getting started with git+github
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+githubJunyoung Lee
 
도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편Sam Kim
 
201017 한주현 생물정보학 github 강의
201017 한주현 생물정보학 github 강의201017 한주현 생물정보학 github 강의
201017 한주현 생물정보학 github 강의Joohyun Han
 

What's hot (20)

Linux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario ChoLinux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario Cho
 
[NDC16] Effective Git
[NDC16] Effective Git[NDC16] Effective Git
[NDC16] Effective Git
 
Git Tutorial
Git TutorialGit Tutorial
Git Tutorial
 
Git - Level 2
Git - Level 2Git - Level 2
Git - Level 2
 
오픈소스 공헌을 위한 필수 지식
오픈소스 공헌을 위한 필수 지식오픈소스 공헌을 위한 필수 지식
오픈소스 공헌을 위한 필수 지식
 
Git 더하기 GitHub(구름IDE 환경)
Git 더하기 GitHub(구름IDE 환경)Git 더하기 GitHub(구름IDE 환경)
Git 더하기 GitHub(구름IDE 환경)
 
Git
GitGit
Git
 
리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리
 
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
 
파일시스템 관련 명령어
파일시스템 관련 명령어파일시스템 관련 명령어
파일시스템 관련 명령어
 
11. git basic
11. git basic11. git basic
11. git basic
 
버전관리시스템 종류와 소개
버전관리시스템 종류와 소개버전관리시스템 종류와 소개
버전관리시스템 종류와 소개
 
Git 입문자를 위한 가이드
Git 입문자를 위한 가이드Git 입문자를 위한 가이드
Git 입문자를 위한 가이드
 
깃허브 시작하기
깃허브 시작하기깃허브 시작하기
깃허브 시작하기
 
GitHub 실습 교육
GitHub 실습 교육GitHub 실습 교육
GitHub 실습 교육
 
Git의 개념과 사용
Git의 개념과 사용Git의 개념과 사용
Git의 개념과 사용
 
Git 코드랩 스터디 2
Git 코드랩 스터디 2Git 코드랩 스터디 2
Git 코드랩 스터디 2
 
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+github
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+githubGit 더하기 GitHub(Git클라이언트 활용) / Getting started with git+github
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+github
 
도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편
 
201017 한주현 생물정보학 github 강의
201017 한주현 생물정보학 github 강의201017 한주현 생물정보학 github 강의
201017 한주현 생물정보학 github 강의
 

Viewers also liked

Deep machine learning by Mario Cho
Deep machine learning by Mario ChoDeep machine learning by Mario Cho
Deep machine learning by Mario ChoMario Cho
 
오픈소스로 시작하는 인공지능 실습
오픈소스로 시작하는 인공지능 실습오픈소스로 시작하는 인공지능 실습
오픈소스로 시작하는 인공지능 실습Mario Cho
 
Koss Lab 세미나 오픈소스 인공지능(AI) 프레임웍파헤치기
Koss Lab 세미나 오픈소스 인공지능(AI) 프레임웍파헤치기 Koss Lab 세미나 오픈소스 인공지능(AI) 프레임웍파헤치기
Koss Lab 세미나 오픈소스 인공지능(AI) 프레임웍파헤치기 Mario Cho
 
Introduce Deep learning & A.I. Applications
Introduce Deep learning & A.I. ApplicationsIntroduce Deep learning & A.I. Applications
Introduce Deep learning & A.I. ApplicationsMario Cho
 
Re: 제로부터시작하는텐서플로우
Re: 제로부터시작하는텐서플로우Re: 제로부터시작하는텐서플로우
Re: 제로부터시작하는텐서플로우Mario Cho
 
A.I. Exercise.
A.I. Exercise.A.I. Exercise.
A.I. Exercise.Mario Cho
 

Viewers also liked (6)

Deep machine learning by Mario Cho
Deep machine learning by Mario ChoDeep machine learning by Mario Cho
Deep machine learning by Mario Cho
 
오픈소스로 시작하는 인공지능 실습
오픈소스로 시작하는 인공지능 실습오픈소스로 시작하는 인공지능 실습
오픈소스로 시작하는 인공지능 실습
 
Koss Lab 세미나 오픈소스 인공지능(AI) 프레임웍파헤치기
Koss Lab 세미나 오픈소스 인공지능(AI) 프레임웍파헤치기 Koss Lab 세미나 오픈소스 인공지능(AI) 프레임웍파헤치기
Koss Lab 세미나 오픈소스 인공지능(AI) 프레임웍파헤치기
 
Introduce Deep learning & A.I. Applications
Introduce Deep learning & A.I. ApplicationsIntroduce Deep learning & A.I. Applications
Introduce Deep learning & A.I. Applications
 
Re: 제로부터시작하는텐서플로우
Re: 제로부터시작하는텐서플로우Re: 제로부터시작하는텐서플로우
Re: 제로부터시작하는텐서플로우
 
A.I. Exercise.
A.I. Exercise.A.I. Exercise.
A.I. Exercise.
 

Similar to 제로부터시작하는 Git 두번째 이야기

Git basic2 chaos
Git basic2 chaosGit basic2 chaos
Git basic2 chaosYunkyu Choi
 
200720 바이오협회 생물정보학 파이썬 강의
200720 바이오협회 생물정보학 파이썬 강의 200720 바이오협회 생물정보학 파이썬 강의
200720 바이오협회 생물정보학 파이썬 강의 Joohyun Han
 
200718 덕성여대 생물정보학 강의 :: 생물정보학 파이썬
200718 덕성여대 생물정보학 강의 :: 생물정보학 파이썬200718 덕성여대 생물정보학 강의 :: 생물정보학 파이썬
200718 덕성여대 생물정보학 강의 :: 생물정보학 파이썬Joohyun Han
 
오픈소스GIS 개발 일반 강의자료
오픈소스GIS 개발 일반 강의자료오픈소스GIS 개발 일반 강의자료
오픈소스GIS 개발 일반 강의자료BJ Jang
 
GitHub 활용하기
GitHub 활용하기GitHub 활용하기
GitHub 활용하기DataUs
 
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기Joongi Kim
 
Yobi-hands-on-lab-at-d2fest
Yobi-hands-on-lab-at-d2festYobi-hands-on-lab-at-d2fest
Yobi-hands-on-lab-at-d2festinsanehong Kim
 
[D2 fest 2014]yobi hands on lab
[D2 fest 2014]yobi hands on lab[D2 fest 2014]yobi hands on lab
[D2 fest 2014]yobi hands on labNAVER D2
 
공간정보아카데미 - Day1 오픈소스개발 일반
공간정보아카데미 - Day1 오픈소스개발 일반공간정보아카데미 - Day1 오픈소스개발 일반
공간정보아카데미 - Day1 오픈소스개발 일반BJ Jang
 
리스펙토링 세미나 - Git, Github 알아보기
리스펙토링 세미나 - Git, Github 알아보기리스펙토링 세미나 - Git, Github 알아보기
리스펙토링 세미나 - Git, Github 알아보기Wooyoung Ko
 
Story About Git_oh4851
Story About Git_oh4851Story About Git_oh4851
Story About Git_oh4851Hyeok Oh
 
[17.02.09] Github introduction (Korean Version)
[17.02.09] Github introduction (Korean Version)[17.02.09] Github introduction (Korean Version)
[17.02.09] Github introduction (Korean Version)Ildoo Kim
 
git 간단한 사용방법
git 간단한 사용방법git 간단한 사용방법
git 간단한 사용방법Oh Dongju
 
Git: A Motivating Introduction
Git: A Motivating IntroductionGit: A Motivating Introduction
Git: A Motivating IntroductionJongwook Choi
 
[201808] GitHub 사용하기 - GIt & 협업 활용
[201808] GitHub 사용하기 - GIt & 협업 활용[201808] GitHub 사용하기 - GIt & 협업 활용
[201808] GitHub 사용하기 - GIt & 협업 활용Ian Choi
 
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅Youngmin Koo
 

Similar to 제로부터시작하는 Git 두번째 이야기 (20)

Git basic2 chaos
Git basic2 chaosGit basic2 chaos
Git basic2 chaos
 
200720 바이오협회 생물정보학 파이썬 강의
200720 바이오협회 생물정보학 파이썬 강의 200720 바이오협회 생물정보학 파이썬 강의
200720 바이오협회 생물정보학 파이썬 강의
 
200718 덕성여대 생물정보학 강의 :: 생물정보학 파이썬
200718 덕성여대 생물정보학 강의 :: 생물정보학 파이썬200718 덕성여대 생물정보학 강의 :: 생물정보학 파이썬
200718 덕성여대 생물정보학 강의 :: 생물정보학 파이썬
 
JetsonTX2 Python
 JetsonTX2 Python  JetsonTX2 Python
JetsonTX2 Python
 
오픈소스GIS 개발 일반 강의자료
오픈소스GIS 개발 일반 강의자료오픈소스GIS 개발 일반 강의자료
오픈소스GIS 개발 일반 강의자료
 
GitHub 활용하기
GitHub 활용하기GitHub 활용하기
GitHub 활용하기
 
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
 
Git lecture1
Git lecture1Git lecture1
Git lecture1
 
Yobi-hands-on-lab-at-d2fest
Yobi-hands-on-lab-at-d2festYobi-hands-on-lab-at-d2fest
Yobi-hands-on-lab-at-d2fest
 
[D2 fest 2014]yobi hands on lab
[D2 fest 2014]yobi hands on lab[D2 fest 2014]yobi hands on lab
[D2 fest 2014]yobi hands on lab
 
공간정보아카데미 - Day1 오픈소스개발 일반
공간정보아카데미 - Day1 오픈소스개발 일반공간정보아카데미 - Day1 오픈소스개발 일반
공간정보아카데미 - Day1 오픈소스개발 일반
 
리스펙토링 세미나 - Git, Github 알아보기
리스펙토링 세미나 - Git, Github 알아보기리스펙토링 세미나 - Git, Github 알아보기
리스펙토링 세미나 - Git, Github 알아보기
 
Story About Git_oh4851
Story About Git_oh4851Story About Git_oh4851
Story About Git_oh4851
 
[17.02.09] Github introduction (Korean Version)
[17.02.09] Github introduction (Korean Version)[17.02.09] Github introduction (Korean Version)
[17.02.09] Github introduction (Korean Version)
 
Git 코드랩 스터디 1
Git 코드랩 스터디 1Git 코드랩 스터디 1
Git 코드랩 스터디 1
 
git 간단한 사용방법
git 간단한 사용방법git 간단한 사용방법
git 간단한 사용방법
 
Git: A Motivating Introduction
Git: A Motivating IntroductionGit: A Motivating Introduction
Git: A Motivating Introduction
 
[201808] GitHub 사용하기 - GIt & 협업 활용
[201808] GitHub 사용하기 - GIt & 협업 활용[201808] GitHub 사용하기 - GIt & 협업 활용
[201808] GitHub 사용하기 - GIt & 협업 활용
 
Fun git hub
Fun git hubFun git hub
Fun git hub
 
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
 

More from Mario Cho

Python pyenv virtualenv
Python pyenv virtualenvPython pyenv virtualenv
Python pyenv virtualenvMario Cho
 
Open source ai_technical_trend
Open source ai_technical_trendOpen source ai_technical_trend
Open source ai_technical_trendMario Cho
 
Koss 6 a17_deepmachinelearning_mariocho_r10
Koss 6 a17_deepmachinelearning_mariocho_r10Koss 6 a17_deepmachinelearning_mariocho_r10
Koss 6 a17_deepmachinelearning_mariocho_r10Mario Cho
 
Open stack 4day
Open stack 4dayOpen stack 4day
Open stack 4dayMario Cho
 
티벳 사자의 서: 환생론/우주관
티벳 사자의 서: 환생론/우주관티벳 사자의 서: 환생론/우주관
티벳 사자의 서: 환생론/우주관Mario Cho
 
EMT machine learning 12th weeks : Anomaly detection
EMT machine learning 12th weeks : Anomaly detectionEMT machine learning 12th weeks : Anomaly detection
EMT machine learning 12th weeks : Anomaly detectionMario Cho
 
ESM Machine learning 5주차 Review by Mario Cho
ESM Machine learning 5주차 Review by Mario ChoESM Machine learning 5주차 Review by Mario Cho
ESM Machine learning 5주차 Review by Mario ChoMario Cho
 
ESM Mid term Review
ESM Mid term ReviewESM Mid term Review
ESM Mid term ReviewMario Cho
 
ESM SVM & Unsupervised Learning
ESM SVM & Unsupervised LearningESM SVM & Unsupervised Learning
ESM SVM & Unsupervised LearningMario Cho
 
Tfk 6618 tensor_flow로얼굴인식구현_r10_mariocho
Tfk 6618 tensor_flow로얼굴인식구현_r10_mariochoTfk 6618 tensor_flow로얼굴인식구현_r10_mariocho
Tfk 6618 tensor_flow로얼굴인식구현_r10_mariochoMario Cho
 
Koss 1605 machine_learning_mariocho_t10
Koss 1605 machine_learning_mariocho_t10Koss 1605 machine_learning_mariocho_t10
Koss 1605 machine_learning_mariocho_t10Mario Cho
 
Storage based on_openstack_mariocho
Storage based on_openstack_mariochoStorage based on_openstack_mariocho
Storage based on_openstack_mariochoMario Cho
 
An Introduce of OPNFV (Open Platform for NFV)
An Introduce of OPNFV (Open Platform for NFV)An Introduce of OPNFV (Open Platform for NFV)
An Introduce of OPNFV (Open Platform for NFV)Mario Cho
 

More from Mario Cho (13)

Python pyenv virtualenv
Python pyenv virtualenvPython pyenv virtualenv
Python pyenv virtualenv
 
Open source ai_technical_trend
Open source ai_technical_trendOpen source ai_technical_trend
Open source ai_technical_trend
 
Koss 6 a17_deepmachinelearning_mariocho_r10
Koss 6 a17_deepmachinelearning_mariocho_r10Koss 6 a17_deepmachinelearning_mariocho_r10
Koss 6 a17_deepmachinelearning_mariocho_r10
 
Open stack 4day
Open stack 4dayOpen stack 4day
Open stack 4day
 
티벳 사자의 서: 환생론/우주관
티벳 사자의 서: 환생론/우주관티벳 사자의 서: 환생론/우주관
티벳 사자의 서: 환생론/우주관
 
EMT machine learning 12th weeks : Anomaly detection
EMT machine learning 12th weeks : Anomaly detectionEMT machine learning 12th weeks : Anomaly detection
EMT machine learning 12th weeks : Anomaly detection
 
ESM Machine learning 5주차 Review by Mario Cho
ESM Machine learning 5주차 Review by Mario ChoESM Machine learning 5주차 Review by Mario Cho
ESM Machine learning 5주차 Review by Mario Cho
 
ESM Mid term Review
ESM Mid term ReviewESM Mid term Review
ESM Mid term Review
 
ESM SVM & Unsupervised Learning
ESM SVM & Unsupervised LearningESM SVM & Unsupervised Learning
ESM SVM & Unsupervised Learning
 
Tfk 6618 tensor_flow로얼굴인식구현_r10_mariocho
Tfk 6618 tensor_flow로얼굴인식구현_r10_mariochoTfk 6618 tensor_flow로얼굴인식구현_r10_mariocho
Tfk 6618 tensor_flow로얼굴인식구현_r10_mariocho
 
Koss 1605 machine_learning_mariocho_t10
Koss 1605 machine_learning_mariocho_t10Koss 1605 machine_learning_mariocho_t10
Koss 1605 machine_learning_mariocho_t10
 
Storage based on_openstack_mariocho
Storage based on_openstack_mariochoStorage based on_openstack_mariocho
Storage based on_openstack_mariocho
 
An Introduce of OPNFV (Open Platform for NFV)
An Introduce of OPNFV (Open Platform for NFV)An Introduce of OPNFV (Open Platform for NFV)
An Introduce of OPNFV (Open Platform for NFV)
 

제로부터시작하는 Git 두번째 이야기

  • 2. Mario Cho Development Experience ◆ Image Recognition using Neural Network ◆ Bio-Medical Data Processing ◆ Human Brain Mapping on High Performance Computing ◆ Medical Image Reconstruction (Computer Tomography) ◆ Enterprise System ◆ Open Source Software Developer ◆ OPNFV (NFV&SDN) & OpenStack ◆ Machine Learning (TensorFlow, Torch, Leaf) Cognitive Artificial Intelligence for Medicine ◆ Machine Learning ◆ Medical Informatics of oncology Book ◆ Unix V6 Kernel Mario Cho hephaex@gmail.com
  • 3. Contents Git 이란? 왜 Git을 ? Github 계정을 만들어보자! Git 실습 Basic Git 이해하기 Git 실습 Advanced OpenSoruce 활동
  • 4. III. install local terminal • http://www.putty.org 에 접속해서
  • 6. III. Open local terminal using putty or term • Windows 환경: putty 를 설치하고, 창을 열어 192.168.56.10 으로 접속합니다. • OSX 환경: 터미널을 열어 $ ssh 192.168.56.10 –l ubuntu 로 접속합니다.
  • 7. IV. Install git • Git을 설치하자 – $ apt-get install git-core • 도커를 설치해서 파이선 환경(jupiter notebook)을 준비하자. – $ wget -qO- https://get.docker.com/ | sh – $ sudo usermod -aG docker ubuntu • 로그 아웃한 뒤 재 접속.
  • 8. IV. Jupiter Notebook 환경 준비 • 도커를 설치해서 파이선 환경(jupiter notebook)을 준비하자. – $ wget -qO- https://get.docker.com/ | sh – $ sudo usermod -aG docker ubuntu • 로그 아웃한 뒤 재 접속.
  • 9. github 실습 1. Git 환경 -> 가상화 환경으로 리눅스 설치 2. Github 회원 가입 3. git 실습 (basic) -> https://www.github.com -> 리눅스 터미널 환경(cli) 실습
  • 10. git 실습: github 회원가입 • 웹브라우저를 열고 (익스플로러, 크롬, 파이어폭스, 사파리등) • https://github.com 에 접속
  • 11. git 실습: github 회원가입 • Sign up 을 클릭 • Step1:사용자이름, 이메일, 접속 암호를 입력후 create an account
  • 12. git 실습: github 회원가입 • Step2: Choose your plan • Unlimited public repositories for free 선택후 Continue
  • 13. git 실습: github 회원가입 • Step3: Tailor your experience • Submit 하거나 skip this step
  • 14. git 실습: github 회원가입 • Final step: 이메일 확인 • Verify email address 클릭하거나 링크를 붙여 놓고, 열기
  • 15. git 실습: github 회원가입 • 이제부터 나도 Github 회원!
  • 16. git 실습: github 회원가입 • github에 새로운 저장소도 만들 수 있지!
  • 17. github 실습 1. Git 환경 -> 가상화 환경으로 리눅스 설치 2. Github 회원 가입 3. git 실습 (basic) -> https://www.github.com -> 리눅스 터미널 환경(cli) 실습
  • 18. Step0: 실습 진도 체크 • https://docs.google.com/spreadsheets/d/1gU9WgFIb5LxTVrF XWi4gPdsEI-uXHy4jvYhW7JXaGDI/edit?usp=sharing
  • 19. Step0: github 계정 설정 1) putty 를 열어서 192.168.56.10 에 접속 2) 로그인 -ID: ubuntu - Password: ubuntu 자신의 github 계정, 이메일과 이름 입력 $ git config –global user.email xxx@xxx.com $ git config –global user.name “XXX”
  • 20. Step0: 기본 명령어 # git add README.md # git commit -m “README.md add” # git pull origin master # git push origin master • 로컬 저장소에 새로운 자료 (역사,history)를 추가 • 새로운 자료에 대한 내용을 쓰기 • 원격(주로 github)에서 최신 자료를 받아서(Pull) 동기화하기 • 로컬에서 추가하거나 바뀐 자료를 원격 저장소에 올리기(Push)
  • 21. Step0: github 계정 설정 • Git 계정에서 만들었던 저장소를 로컬로 불러서 저장하기. $ git clone https://github.com/hephaex/git-psu.git
  • 22. Step1: Git init • 사용자 기본 폴더로 이동하자 – $ cd ~ • 실습할 play-git 폴더를 만들자. – $ mkdir play-git • play-git 폴러로 이동하자 – $ cd play-git • 해당 폴더를 git 초기화 – $ git init GIT 상태 확인 명령어 (중간중간 수시로 확인하자) $ git show $ git log $ git diff $ git status
  • 23. Step1: 첫커밋하기 • 파일을 만들어 보자. – $ touch git-ex1.txt • 만들 파일을 git에 추가하자. – $ git add git-ex1.txt • 첫 커밋 하기 – $ git commit –m “first git commit” GIT 상태 확인 명령어 (중간중간 수시로 확인하자) $ git show $ git log $ git diff $ git status
  • 24. Step1: 첫커밋하기 • 파일을 만들어 보자. – $ touch play-git.txt • 만들 파일을 git에 추가하자. – $ git add play-git.txt • 첫 커밋 하기 – $ git commit –m “first git commit” GIT 상태 확인 명령어 (중간중간 수시로 확인하자) $ git show $ git log $ git diff $ git status
  • 25. Step2: 내용을 바꾸어 보기 • 상태를 확인한다. – $ git status • git-ex에 있는 step1.txt를 복사한다. – $ cp ~/git-ex/step1.txt . • step1.txt를 로컬 저장소에 추가한다. – $ git add step1.txt – $ git commit –m “step1.txt add” GIT 상태 확인 명령어 (중간중간 수시로 확인하자) $ git show $ git log $ git diff $ git status
  • 26. Step2: 내용을 바꾸어 보기 • step2.txt 를 step1.txt 로 덥어쓴다. – $ cp ~/git-ex/step2.txt step1.txt • 바뀐 step1.txt 를 git으로 추가한다. – $ git add step1.txt GIT 상태 확인 명령어 (중간중간 수시로 확인하자) $ git show $ git log $ git diff $ git status
  • 27. Step2: 내용을 바꾸어 보기 • 내용이 바뀌었다면 add하자. – $ git add step1.txt • 바뀐 step1.txt를 commit 하자. – $ git commit –m “step1.txt change” • 지금까지 commit 한 것을 확인하자 – $ git log GIT 상태 확인 명령어 (중간중간 수시로 확인하자) $ git show $ git log $ git diff $ git status
  • 28. Step3: sign을 추가해서 commit 하기 • git-psu에 있는 step3~7.py를 복사한다. – $ cp ~/git-psu/step*.py . • step3.py를 로컬 저장소에 추가한다. – $ git add step3.py • 서명과 함께 commit 한다. – $ git commit –sm “step3.py: print welcome” • * 서명은 오픈 소스 라이센스를 올바르게 이해하고 commit을 한다는 의미, • **리눅스 커널에서 commit을 공식으로 만들 때 이용
  • 29. Step4: 원격 저장소를 만들어보자. • Github에 로그인 합니다. • 맨위에 +를 클릭하고 Create Repository를 선택합니다. Create Repository
  • 30. Step4: 원격 저장소를 만들어보자 • Create a new repository에서 Repository name을 입력하자 – Ex) pnu • Description에는 이 저장소의 “무엇에 쓰는 것인지” 적자. • Create repository 를 클릭해서 새로운 저장소를 만들자.Create repository Create repository
  • 31. Step4: 원격 저장소를 만들어보자 • 원격 저장소의 주소를 복사해 놓자. – CTRL+C
  • 32. Step4: 원격 저장소를 만들어보자 • 원격 저장소의 주소를 복사해 놓자. – CTRL+C
  • 33. Step5: 원격 저장소에 자료를 올리자. • 리눅스 터미널로 돌아가서 • 방금전 복사한 URL (github 원격저장소)를 로컬에 등록하자. – $ git remote add origin https://github.com/hephaex/pnu.git
  • 34. Step5: 원격 저장소에 자료를 올리자. • Github 원격저장소로 자료를 올리자(Push). – $ git push origin master • Github 웹페이지를 열고 확인하자.
  • 35. Step5: 원격 저장소에 자료를 올리자.
  • 36. Step6: 원격 저장소에서 자료를 받아오자. • Github 웹페이지를 열고. https://github.com/hephaex/git-pnu.git 를 보자. – https://github.com/hephaex/git-pnu.git • 자신의 로컬 저장소에 자료를 받아보자. – $ cd ~ – $ git clone https://github.com/hephaex/git-pnu.git • ls 명령으로 저장된 정보를 확인해 보자.
  • 37. 오픈 소스 프로젝트 찾기 1. 구글링 2. 오픈소스 커뮤니티에서 프로젝트 찾기 • The Apache Software Foundation(ASF) • Jboss • GitHub • BitBucket • Google Code • CodeProject • Sourceforge
  • 38. 공개 SW 포털 (http://www.oss.kr)
  • 39. 오픈 소스 저장소: https://github.com
  • 40. 리눅스 커널을 공부하기 전에 대상과 어떤 것을 분석할지 목표를 분명히 합니다. 아울러 target device도 함께 정합니다. (추천 라즈베리 파이2) - kernel boot process - boot loader에서 부터 시작해서 하드웨어 초기화, 메모리 초기화, 인터럽트 설정, - init process 에 이르는 일련의 과정을 분석. - 내용이 많지만, 하드웨어, 커널에서 사용하는 주요 메크로, 알고리즘을 배울 수 있음. - mm_init() 분석 - start_kernel()에 보면 메모리를 초기화 하는 mm_init()이 있습니다. - 리눅스 커널은 buddy와 slub을 이용해서 메모리를 관리합니다. - buddy와 slub이 어떻게 초기화 되고 커널에 메모리 초기호/할당/제거 를 분석 - Device Driver 분석 - GPIO 디바이스를 분석하고 라즈베리 파이2를 이용해서 실험 - network 디바이스를 분석해서 network stack을 심화 - 그외 스케쥴러 분석 등등. I. 오픈소스(커널)를 공부하기 위한 목표 설정
  • 41. II. 오픈소스(커널)를 공부하기 위해 필요한 것들 - Note PC or Desktop or Cloud connection - Editor : Vim, Emacs, ??? - Tools: ctags, gtags, cscope, … - 참고 서적 - AP Manual - ARM Cortex A Series Programmer Guide - ARM Cortex A15 Technical Reference Manual - kernel 분석에 필요한 AP user manual (가장 중요하지만, , , ) - DTB (Device Tree Blob) - Power ePAPR_APPROVED_v1.1 - Kernel 책들 - UNIX V6 로 배우는 커널의 원리와 구조 (운영체제에 대한 근본원리) - 코드로 알아보는 ARM 리눅스 커널 (2.6.x 커널 기준) - 리눅스 커널 해설 (2.6.x 커널) - 어셈블러 - GNU : GNU Assembler Directive - GNU : GNU Assembler Manual - GNU : GNU Linker Manual
  • 42. 커널은 코드의 양이 크기 때문에 (약 1500만 라인) 많은 지식을 필요로 하고, 많은 시간을 걸쳐서 하는 개발자 마라톤과 같은 부분이 있으므로 꾸준히 공부할 동료 가 필요합니다. 1. 함께 공부할 친구를 찾는다. (개발자 커뮤니티) 2. 오픈 소스 스터디에서 존칭을 사용 (상호 존중) 3. 오픈 소스 스터디에 부담 주는 행동 자제. (한사람이 부담을 주는 행동들…) 4. 커널에 맞는 구하기 쉬운 디바이스 선정 (라즈베리 파이 2? or 3?) 5. 꾸준히 공부 할 수 있는 공간 6. 스터디 내용을 공유할 수있는 인터넷 공간 (커뮤니티 게시판, 공유 문서) II. 오픈소스(커널)를 공부할 때 Ground Rule
  • 43. III. 이론 공부 시작 Let’s Start!!! 1. 각자 다른 배경의 사람들이 커뮤니티에 있으므로 서로간의 눈 높이를 맞추기 위해서 이론서를 함께 읽습니다. 2. 이론서는 얇은 책으로… 3. 라운드 로빈 방식으로 서로 조금씩 돌아가면서 읽습니다.
  • 44. III. 이론 공부: Linux info from the source
  • 45. IV. 소스 코드 분석 장소: 대학교 강의실, 토즈 (?) 방법: - 소스 코드 드라이빙 - 소스 코드를 보면서 토론. - 인터넷 공유 문서 (구글 doc) 등으로 자료 공유
  • 46. IV. Linux Kernel build up vmlinux Image piggy.S piggy.gz piggy.o head.o misc.o head-cpu.o head-board.o vmlinux zImage RAW kernel Executable (ELF object) Stripped Kernel binary (binary Object) Compressed Kernel binary objcopy gzip as ld objcopy Asm wrapper piggy.gz + bootstrap code 위치 arch/arm/boot/co mpressed Composite Kernel Image (ELF Object) Boot loader 용 Kernel Image - Make를 통해서 커널 소스 코드를 컴파일후 kernel image가 만들어지는 과정
  • 47. Boot Loader -> start_kernel() • Start_kernel()은 init 프로세스가 동작할 때까지 커널을 초기화합니다. • 코드는 init/main.c 에 정의합니다. IV. 소스 코드 분석의 예 :start_kernel()
  • 48. IV. 소스 분석: tag를 이용해서 함수를 추적 리눅스 커널 개발을 위한 여러가지 도구제공 - ctags. gtags. cscope, … 예) start_kernel()->mm_init()->mem_init()
  • 49. V. 커뮤니티 활동 : 공유 (기계학습)
  • 50. V. start_kernel() 주요기능 start()_kernel() - smp_setup_processor_id();// physical CPU 0 (가칭) 으로 boot 진행 - cgroup_init_early(); // cgroup을 사용하기 위한 구조체 초기화 - boot_cpu_init(); // 현재 cpu(core id)를 읽어서 cpu_XXX_bits를 설정함 - setup_arch(); // dtb를 읽어서 메모리 블록과 영역 초기화 - page_alloc_init(); // cpu_chain에 page_alloc_cpu_notify를 연결 - mm_init(); // 메모리 블록에서 buddy초기화 후 stub 초기화 - sched_init(); // scheduller가 사용하는 구조체 초기화, init_task설정 - rcu_init(); // rcu자료 구조, bh, sched, preemt 초기화 - early_irq_init(); // irq_desc 0~15까지 object를 할당 받고 초기화 - init_IRQ(); // GIC, COMBINNER가 사용할 메모리 할당과 자료 구조 설정 - call_function_init(); // 각 cpu core에서 사용할 call_single_queue 초기화 - pidmap_init(); // pidmap 초기화 - rest_init() // init_process (PID 1번) 실행을 위한 초기화 후실행
  • 51. start()_kernel()->mm_init()->mem_init()->free_all_bootmem()->free_all_bootmem_core(bdata)- >__freepages_bootmem(pfn_to_page(start),order) bootmem으로 관리하던 메모리를 buddy로 바꾸는 과정입니다. - while (start < end) { - shift = idx & (BITS_PER_LONG - 1); - if (IS_ALIGNED(start, BITS_PER_LONG) && vec == ~0UL) { __free_pages_bootmem(pfn_to_page(start), order); // CPU0의 vm_event_states.event[PGFREE] 를 32로 설정함 // page에 해당하는 pageblock의 migrate flag를 반환함 // struct page의 index 멤버에 migratetype을 저장함 // struct page의 _count 멥버의 값을 0 으로 초기화함 // order 5 buddy를 contig_page_data에 추가함 // (&contig_page_data)->node_zones[ZONE_NORMAL].vm_stat[NR_FREE_PAGES]: 32 로 설정 // vmstat.c의 vm_stat[NR_FREE_PAGES] 전역 변수에도 32로 설정 count += BITS_PER_LONG; start += BITS_PER_LONG; } else { // node_bootmem_map[0]의 값이 0아닐 경우 while (vec && cur != start) { if (vec & 1) { __free_pages_bootmem(page, 0); // CPU0의 vm_event_states.event[PGFREE] 를 1로 설정함 // page에 해당하는 pageblock의 migrate flag를 반환함 // struct page의 index 멤버에 migratetype을 저장함 // struct page의 _count 멥버의 값을 0 으로 초기화함 // order 0 buddy를 contig_page_data에 추가함 // (&contig_page_data)->node_zones[ZONE_NORMAL].vm_stat[NR_FREE_PAGES]: 1 로 설정 // vmstat.c의 vm_stat[NR_FREE_PAGES] 전역 변수에도 1로 설정 count++; } } V. 커뮤니티 활동: 소스 코드 분석 공유
  • 52. VI. 커뮤니티 활동: 궁금하면 물어보자.
  • 53. VII. 커뮤니티 활동: 아는 것을 알려주자.
  • 54. VII. 커뮤니티 활동: 아는 것을 알려주자.
  • 55. VIII. 커뮤니티 활동: 잘못 된것을 발견하면 수정
  • 56. VIII. 커뮤니티 활동: 수정한 것을 함께 리뷰
  • 57. IX. 커뮤니티 활동: 개선 결과 반영
  • 59. Appendix #2: ROS • ROS Robot Operating System