2016년 10월 27일 목요일

[영어공부] 전치사 on

날짜(요일, 기념일)

on Tuesday 화요일에
on Wednesday 수요일에
on August 8th 8월 8일에
on November 11th 11월11일에
on the first day 첫째날에
on the second day 둘째날에
on my birthday 내 생일날에
on my wedding day 내 결혼식날에
on Christmas 크리스마스날에
on a fine day 화창한 날에
on a rainy day 비 오는 날에

장소(접촉, 바깥면 같은 느낌)

on the desk 책상 위에
on the shelf 선반 위에
on the floor 바닥에
on the ground 땅 위에
on the couch 소파 위에
on the door 문에
on the wall 벽에
on the ceiling 천장에
on my shirt 내 셔츠에
on my finger 내 손가락에
on the water 물 표면에
on the plane 비행기에 (탑승)
on the subway 지하철에 (탑승)
on the bus 버스에 (탑승)
on the elevator 엘리베이터에


수단

on the internet 인터넷으로
on the cell phone 핸드폰으로
on the radio 라디오로
on the phone 전화로
on TV 텔레비전으로
on SNS SNS로

[영어공부] 전치사 at

시간 관련

at seven 7시에
at seven thirty 7시30분에
at seventeen 17살에
at the age of seventeen 17살에
at twenty eight 28살에

at noon 정오에
at night 밤에
at midnight 자정에
at that time 그때에
at the last minute 마지막 순간에
at Christmas 크리스마스 때
at Halloween 할로윈 때

at dinner time 저녁 식사 때
at lunch time 점심 식사 때
at breakfast time 아침 식사 때
at my age 내 나이 때
at your age 네 나이 때
at her/his age 그녀(그)의 나이 때
at their age 그들의 나이 때


장소 관련

at home 집에
at school 학교에
at work 직장에
at the bottom 하단에
at the desk 책상에
at the table 테이블에
at the door 문에
at the window 창문에
at the corner 모퉁이에
at the library 도서관에
at the station 역에
at the airport 공항에
at the mall 백화점에
at the store 가게에
at the beach 해변에
at the party 파티에


2016년 10월 22일 토요일

[Bash] 배시 기본 {05} - 히스토리 확장, 이벤트 지정자, 워드 지정자, 한정자

이벤트 지정자(event designator)


$ !!
마지막 명령을 다시 실행한다.

$ !string
string 으로 시작하는 최근 명령을 다시 실행한다.

$ !n
n째 명령행을 실행한다.

$ !?string
string을 포함하는 명령행 중 마지막 명령행

$ ^string1^string2
string1을 string2로 바꾸어 마지막 명령 반복. 문자를 잘못 입력했을 때 쓰면 편한다.

워드 지정자


이전에 내린 명령행에서 특정 워드를 가리킬 수 있다. 이벤트 지정자 뒤에 콜론(:)을 덧붙여서 사용한다.

$ ls -al
$ !!:0
ls 실행 (-al 옵션 떼고)

$ ls -al
$ !!:0-1
0부터 1까지 실행. 즉 ls -al 모두 실행. 순서는 첫번째가 아닌 0번째 부터다.

$ ls -al
$ !!:0-$
0부터 마지막까지 실행

$ !!:x*
x-$와 같다.

$ !!:*
1-$와 같다.

한정자(modifier)

한정자도 콜론(:)을 붙여서 사용한다.

$ ls -al /some/path/to/your/file.txt
$ ls -l !!:$:h
ls -al /some/path/to/your
h는 제일 뒤의 경로명을 삭제한다.

$ ls -al /some/path/to/your/file.txt
$ ls -al:$:t
ls -al file.txt
t는 가장 뒷 부분을 남겨놓고 앞 부분의 경로명을 모두 삭제한다.

$ ls -al /some/path/to/your/file.txt
$ ls -al !!:$:r
ls -al /some/path/to/your/file
r은 서픽스(.txt)를 삭제한다.

$ ls -al /some/path/to/your/file.txt
$ !!:s/ls -al/cat/
ls -al  명령을 cat으로 바꿔서 실행한다.

$ cp /etc/password /backup/password.bak
$ !!:gs/password/passwd/
cp /etc/passwd /backup/passwd.bak
만약 passwd 파일을 백업해야 하는데 password 로 잘못 썼다면 gs를 이용해서 password 문자를 모두 passwd로 바꿀 수 있다. s만 쓰면 앞의 password만 passwd로 바뀐다.

$ tar cvf password.tar password
$ !!:g&
&는 마지막 substitution을 한 번 더 실행한다. 마지막 substitution이 s/password/passwd 이므로 tar cvf passwd.tar passwd로 명령이 바뀌어서 실행된다.

$ tar cvf tar-file.tar file1 file2 file3
$ tar cvfz new-tar-file.tar !tar:3-$:p
tar cvfz new-tar-file.tar file1 file2 file3
p는 실제로 실행하지 않고 수정한 명령행을 화면에 출력한다. 의도한 명령행과 같다면 :p를 지우고 실행하면 된다.



[Bash] 배시 기본 {04} - fc, wc

fc 명령

셸의 히스토리 구조를 사용할 수 있다. 명령을 다시 실행시키거나 비슷한 명령을 실행시키고 싶을 때 사용한다.

$ fc -l
마지막 16개 명령행을 표시한다.

$ fc -l number number2
number과 number2 사이의 명령행을 표시한다.

$ fc -l v
v로 시작하는 최근의 명령행으로 부터 이 명령행 이후의 모든 명령행을 표시한다.

$ fc -ln
n 옵션은 번호를 생략한다.

$ fc -e vim line_number
$ fc -e vim characters
-e 옵션은 에디터(vim)를 이용해서 편집모드로 들어가게 해준다. line_number를 쓰면 해당 명령행을, characters를 쓰면 해당 문자로 시작하는 명령행을 vim으로 편집할 수 있고, 편집이 끝나고 에디터를 종료하면 바뀐 명령행이 실행된다.

$ fc -s
마지막으로 실행한 명령행을 다시 실행

$ fc -s characters
characters로 시작하는 최근의 명령행을 실행

$ fc -s vim=vi vim
vim으로 시작하는 최근의 명령행을 실행하는데 vim이라는 모든 단어를 vi로 바꿔서 실행


wc 명령


wc 명령은 파일 내의 라인, 단어, 문자의 수를 출력한다.

$ wc file
라인수, 단어수, 문자수 순으로 출력된다.

$ wc -c file
$ wc -l file
$ wc -w file
c옵션은 문자수, l옵션은 라인수, w옵션은 단어수이다.

예) $ ls -l | wc -l
디렉토리 리스트(ls -l)의 라인수를 출력한다. 디렉토리내 파일의 개수+1개를 얻을 수 있다.

2016년 10월 20일 목요일

[Linux] SSH 설치와 실행

설치, 실행

$ sudo apt-get install ssh
$ sudo /etc/init.d/ssh start

시작프로그램 등록

$ sudo vim /etc/rc.local

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# start ssh server
/etc/init.d/ssh start
exit 0


포트 변경하기

변경하지 않아도 된다. SSH의 기본 포트는 22번이고 변경할 필요가 있다면
$ sudo vim /etc/ssh/sshd_config

port 22 라고 되어있는 것을 원하는 포트로 바꿔준다. 예) port 2200

[Bash] 배시 기본 {03} - 역슬래시, Ctrl

특수 문자와 인용부호

< > | & * ? [ ] 문자 같은 것 들은 특수 문자이다. 특수 문자를 특수 문자로 사용하지 않고 보통 문자로 표현하려면 인용부호(quoting)를 사용한다.

$ echo 2 * 3 > 5 is a valid inequality

위 명령을 실행하면 5 라는 새 파일이 만들어지고, 이 파일 안에는 2, 현재 디렉토리의 모든 파일(*) 그리고 3 is a valid inequality가 씌여진다. 이 경우 * 와 > 를 작은따옴표로 감싸주면 된다.

$ echo '2 * 3 > 5 is a valid inequality'

혹은

$ echo 2 '* 3 >' 5 is a valid inequality

역슬래시-이스케이프 제어

특수 문자 앞에 역슬래시(\ or \) 문자를 입력하는 방법도 있다. 이를 역슬래시 이스케이프 제어(backslash-escaping)라고 한다.

$ echo 2 \* 3 \> 5 is a valid inequality

인용부호로 묶었을 때 와일드카드 문자를 그대로 인식하는 명령어들이 있다. 예를 들면 find 명령의 경우

$ find . -name '*.c'

현재 디렉토리와 그 하위 디렉토리(.)에서 .c로 끝나는 모든 파일을 찾는다. 와일드카드 문자가 포함된 파일 이름을 찾으려면 역슬래시를 사용한다.

$ find . -name '*\*.c'

위 명령은 *.c로 끝나는 모든 파일을 찾는다.

한 줄이 넘는 명령 입력하기

역슬래시나 인용문자(작은따옴표)를 이용한다.

$ echo hello ildelusion \
> virtualization \
> sleepy.

$ echo 'hello ildelusion
> virtualization
> sleepy.'

컨트롤(Ctrl) 키

일종의 특수문자로 Ctrl 키와 다른 키를 동시에 눌러서 실행시킨다.

Ctrl-M : 엔터
Ctrl-C : 현재 명령 중지
Ctrl-D : 입력의 끝
Ctrl-\ : Ctrl-C가 동작하지 않을 경우 현재 명령 중지. Ctrl-C 먼저 사용해야 파일이나 다른 자원의 상태에 문작 발생하지 않는다.
Ctrl-S : 화면 출력 정지
Ctrl-Q : 화면 출력 다시 시작
Ctrl-? : 지운 문자를 다시 되돌린다.
Ctrl-U : 전체 명령행 삭제
Ctrl-Z : 현재 명령 일시 중단


2016년 10월 19일 수요일

[Bash] 배시 기본 {02} - 입출력 방향 재지정, 파이프라인, 백그라운드 작업

쉘(Shell)을 처음배우는 입장에서 표준입력이니 출력이니 하는 말들을 먼저 익히는 것보다 일단 따라해보고 감을 익히는게 좋다고 생각한다. 표준입력은 키보드, 표준출력은 모니터라고 생각하면 된다. 일단 따라해보자.

입출력 방향 재지정

command < filename    # command에 해당하는 명령은 터미널이 아닌 파일에서 표준 입력을 받는다.
command > filename    # command 명령의 표준 출력 방향을 해당하는 파일명으로 재지정한다.

예) $ date > now    # 현재 날짜와 시간을 now 파일에 저장한다.
예) $ cat < file1 > file2    # file1의 내용을 입력으로 받아서 file2에 쓴다.
예) 위 명령은 다음과 같은 명령이다. $ cp file1 file2

파이프라인

다른 명령의 입력으로 어떤 명령의 출력 방향을 재지정하는 것이 파이프(pipe)이다. 파이프로 연결된 명령이 두 개 이상 있는 명령행을 파이프라인(pipeline)이라고 한다.

예) $ sort < file1 | more    # file1을 sorting하여 한 화면씩 출력한다. 스페이스바를 누르면 다음 화면으로 엔터를 누르면 다음 행으로 간다.
예) $ cut -d: -f1 < /etc/passwd | sort    # cut 명령은 콜론으로 구별하는 필드 중에서(-d:) 첫째 필드(-f1)를 추려낸다. /etc/passwd의 내용에서 첫째 필드를 추려내어 sorting한다.

백그라운드 작업

쉘에서는 오래 걸리는 작업을 백그라운드에서 진행시키고, 원하는 일을 포그라운드에서 할 수 있다. 예를 들어 아래와 같이

$ tar -xvf file1.tar &

명령어 뒤에 앰퍼샌드(&) 문자를 붙여주면

[1] 1009

같이 뜨고 프롬프트가 뜬다.

$

프롬프트에 다음 명령을 입력하면 된다.

$ jobs

jobs 명령어는 현재 실행 중인 백그라운드 작업을 확인하는 명령이다.
diff 유틸리티는 파일명을 인자로 받아서 두 가지 파일을 검사한다.

$ diff file1 file2 &

처럼 쓰면 터미널에 결과가 출력된다. 하지만 현재 작업하고 있는 내용과 diff 유틸리티의 결과를 잘 못 볼 수 있다. 이럴 때 출력을 파일로 바꿔준다.

$ diff file1 file2 > result_file &

[FPGA] Rocket Chip Generator

This document refer to this github link.

1. Background


각 repository가 무엇을 하고 있는지
1) rocket-chip
Rocket chip generator. RISC-V Rocket core를 만든다.

2) riscv-tools
RISC-V GCC/Newlib toolchain, RISC-V-LINUX Installation

3) fpga-zynq
Zynq FPGA boards에서 RISC-V rocket chip을 돌리는데 필요한 파일 들. Vivado 2016.2가 필요하다. prebuilt image들이 git submodule들로 이용가능하다.

발표할 것
1) Generate rocket core
2) Download rocket core to FPGA
3) Tool chain (중간 중간)
4) 로켓칩 파라미터 바꾸기. How can I parameterize my Rocket chip?


2. Rocket chip generator repository에 어떤 것들이 있는지?

Berkeley의 chip-building project는 git submodule 을 이용한다.

1) The Submodules

  • chisel3: RTL을 Chisel로 작성하였다.
  • firrtl: chisel3 컴파일러가 만들어내는 intermediate format
  • hardfloat: floating-point units 들을 위한 repository
  • context-dependent-environments: 이걸 이용해서 Chisel code의 parameter들을 바꾼다.
  • riscv-tools: riscv-tools 임.
  • torture: test code - randomized intruction streams which are then run as code on the rocket core(s)
2) The Sub Packages
Rocket-chip Chisel code base는 Scala package들로 나뉘어진다. 각 패키지에 대한 설명을 하겠다.

  • rocket: Rocket core, L1 cache source code
  • uncore: uncore logic, L2 coherence hub, coherent interfaces between tiles (tilelink), debug interface
  • junctions: bus protocols and interfaces
  • groundtest: uncore 쪽 테스트할 수 있는 패키지. rocket core 쪽은 instruction stream generator로 대체한다.
  • coreplex: rocket tiles, L1-to-L2 network, L2 coherence agents, boot ROM이나 debug unit 같은 internal devices를 잇는 역할을 한다.
  • rocketchip: Top level package. Instantiate the coreplex
synopsys의 vcs가 있다면 Verilog simulation 도 할 수 있다.
없다면 vsim을 make할 수 없다.

더불어 rocket-chip/emulator의 Makefile을 바꿀 필요가 있다.
아래 두 줄

rm -rf $@.vcd && mkfifo $@.vc
vcd2vpd $@.vcd $@ > /dev/null &

앞에 #를 써서 주석처리를 하도록 하자.

3. GTKWAVE를 사용해보자.

gtkwave를 통해서 디버깅을 시각적으로 할 수 있다.
* gtkwave 컴파일 방법
1) gtkwave 다운로드
2) ./configure --enable-local-libz
3) make
4) make install

* 사용법
gtkwave OutputFileName.vcd

4. Rocket chip의 파라미터를 변경해보자.

rocket-chip repository에 로켓칩 파라미터를 변경하는 내용이 있지만, 최신 코드와는 맞지 않는 부분이 있다.
현재 파라미터를 조정하는 부분은 내가 파악하기로,
rocket-chip/src/main/scala/rocketchip/configs.scala
rocket-chip/src/main/scala/coreplex/Configs.scala
groundtest와 unittest쪽에도 있는데 나중에 보기로 하고, 먼저 위 두 Configs.scala 파일에 집중하자.

coreplex/Configs.scala의 BaseCoreplexConfig에서 L1 cache의 set, way 개수를 변경 가능.

대표적인 config 소개
DefaultFPGAConfig - Default
DefaultFPGASmallConfig - small cache sizes, disables the FPU, turns off the fast early-out multiplier and divider, reduces the number of TLB entries --> For Zybo FPGA board(smallest ZYNQ)



2016년 10월 18일 화요일

[Scala] Chisel 2.2 Tutorial {01}

본 문서의 레퍼런스: https://chisel.eecs.berkeley.edu/latest/chisel-tutorial.pdf

Rocket chip generator에서 Chisel 언어를 사용한다. Chisel은 Constructing Hardware In a Scala Embedded Language의 약자이다. Rocket chip generator의 소스코드를 보면 .scala 파일인 것을 확인할 수 있다.

본 문서는 Scala 언어를 몰라도 볼 수 있다(고 써있긴 한데, 물론 알면 좋다).

1. Datatypes

Bits - raw collection of bits (1011 이런 것들)
SInt, UInt - signed and unsigned integers
Bool - boolean values
Bundle - struct 같은 것
Vecs - indexable collections of values. 배열같은 것인 듯

* 문서에서 literal value를 lit 이라고 표현한 듯
* Underscore는 string에 쓰일 수 있는데, 가독성을 위해서 쓰일 뿐 무시된다.

val - is used to name variables that have values that won't change (헷갈린다. 찾아보니, the internal state of a val can be changed but the object referred to by a val cannot. A val is not a constant. 즉, val sel = a | b 일 경우 a, b의 값에 따라 sel이 바뀔 수 있지만, sel = a | b 라는 것은 바뀔 수 없다는 뜻 인 듯. 다른 말로 sel = a & b 로 바뀔 수 없다는 뜻인 것 같다.)

2. Builtin Operators

Scala language. === for equality and =/= for inequality


x86 Address Translation Basics

x86 Address Translation Basics

AMD-V의 Nested Paging을 이해하기 위해서 먼저 x86 Address translation에 대해 알아보자.

Virtual address는 프로그램에서 instruction과 data에 접근하기 위해 사용하는 주소이다. 이 주소로 실제 메모리 주소인 physical address에 접근하려면 먼저 address translation 과정을 거쳐야 한다. Page table walker라는 것이 page table을 이용해서 virtual address를 physical address로 바꿔준다. Page table walker는 processor hardware에 (CPU에) 구현되어 있다.

Figure 1은 long mode에서의 page table walk를 보여주고 있다. 먼저 CR3 레지스터를 보고 Page-map level-4 base address를 확인한다. 47-39 bit, 38 - 30 bit, 29 - 21 bit을 타고 타고 20 - 12 bit의 Page-table offset으로 4KB 페이지를 특정 짓고 11-0 bit 의 physical-page offset으로 정확한 physical address를 가리키고 있다.
OS는 context switch를 할때 page table's base pointer (CR3)를 업데이트 한다.

AMD-V Nested Page Tables (NPT)

 gPT는 guest virtual address를 guest physical address로 맵핑하고 nPT는 guest physical address를 system physical address(machine address)로 맵핑한다.

2016년 10월 13일 목요일

[TMUX] TMUX 명령어 정리

글쓴이가 주로 쓰는 TMUX 명령어들만 모아서 정리를 해보았다. TMUX 카피는 이 링크를 참고하자.

tmux new -s [세션이름]
Ctrl-b : : 명령행으로 들어간다.
명령행에서 rename-session [new name]
Ctrl-b d : detach (tmux를 백그라운드로)
tmux ls : 생성되어 있는 세션 목록을 본다.
tmux attach -t 세션이름 : 세션 불러오기

Ctrl-b c : 새창(윈도우)을 생성합니다.
Ctrl-b d : 현재 클라이언트에서 떨어집니다.
Ctrl-b l : 이전에 선택한 윈도우로 이동합니다.
Ctrl-b n : 다음 윈도우로 이동합니다.
Ctrl-b p : 이전 윈도우로 이동합니다.
Ctrl-b w : 윈도우의 리스트를 보여주고 번호를 입력하면 이동합니다.
Ctrl-b 윈도우번호 : 해당 윈도우로 이동합니다.
Ctrl-b & : 현재 윈도우를 종료합니다.
Ctrl-b , : 현재 윈도우의 이름을 바꿉니다.

Ctrl-b % : 세로로 2개의 팬 // 많이 쓴다.
Ctrl-b " : 가로로 2개의 팬
Ctrl-b q : 팬 번호를 보여준다.
Ctrl-b { : 왼쪽 팬을 이동(교체)
Ctrl-b } : 오른쪽 팬을 이동(교체)
Ctrl-b 방향키(위아래) : 팬 이동
Ctrl-b 누른채로 방향키(좌우) : 현재 팬의 사이즈를 조정한다.
Ctrl-b o : 다음 팬으로 이동 // Ctrl-b 를 누른채로 o를 누르면 팬 위치가 바뀐다.(swap)
exit 입력 or Ctrl-d : 팬 종료

exit : 세션도 종료 가능

tmux는 터미널 프로그램의 스크롤은 먹지 않습니다.
스크롤은 Ctrl-b [ 를 사용하시면(여는 대괄호입니다) 우측 상단에 페이징 표시가 되고
페이지 업/다운이나 위/아래 화살표로 이동할 수 있습니다. q누르면 빠져나옵니다.

2016년 10월 10일 월요일

[TMUX] TMUX copy tutorial

TMUX 카피에 대해서 알아보겠다. TMUX 카피는 TMUX 터미널에 띄어져 있는 텍스트들을 복사하고 붙여넣을 수 있는 기능이다. (TMUX 카피 모드라고도 하는 듯)

1. 먼저 configuration 파일을 만들자.
$ cd ~
$ vim .tmux.conf

2. .tmux.conf에 아래 내용을 추가한다.
# Remap prefix from 'C-b' to 'C-a'
# TMUX에서는 Ctrl + b를 먼저 눌러서 커맨드를 입력하는데 Ctrl 키에서 b가 멀어서 a로 맵핑하는 설정. 아래 세 줄
unbind C-b
set-option -g prefix C-a
bind-key C-a send-prefix

# vi mode 이용
setw -g mode-keys vi

# vi 에 익숙한 사람을 위한 키 리맵핑
unbind [
bind Escape copy-mode
unbind p
bind p paste-buffer
bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' copy-selection
3. .tmux.conf 파일을 종료한다.

4. tmux를 켜고 복사 & 붙여넣기를 해보자.

Ctrl + a
Esc
# 카피 모드에 들어왔다. 커서를 복사를 시작할 곳으로 옮기자. hjkl 키를 이용한다.
v
# 복사를 끝낼 곳으로 커서를 옮기자. y를 누르면 복사가 된다.
y
# 붙여넣을 곳으로 이동해서 붙여넣기를 하자. vi의 경우 편집모드로 변환한 뒤에 붙여넣기를 하자.
Ctrl + a
p

2016년 10월 7일 금요일

[FPGA] Zedboard에 rocketchip (RISC-V) 올리기

0. 환경설정

리눅스의 config option에 CONFIG_USB_SERIAL과 CONFIG_USB_SERIAL_CYPRESS_M8 이 y 로 되어있어야 한다. m 으로 되어있다면 y로 바꿔주고 리눅스를 재컴파일하자. 내 리눅스 배포판은 우분투 14.04-4 이다. 커널은 3.18.30을 올렸다.

Vivado 2016-2 설치


로켓칩 설치


위 github 의 quick instructions 를 따라해보자.

1. Quick instructions


1) $ make fetch-images

2) $ make fetch-riscv-linux

3) SD카드에 이미지 카피
$ make load-sd SD=path_to_mounted_sdcard
나의 경우 $ make load-sd SD=/media/jsim/6910-C05B

4) minicom 실행

미니컴이 없다면 apt-get 으로 설치한다.

$ dmesg | grep tty
ttyACM0 가 있음을 확인

$ sudo minicom -s

serial port setup에서 A를 눌러서 Serial Device 이름을 /dev/ttyACM0 로 바꿔준다. serial port setup이 안보인다면 Ctrl-A Z 를 눌러서 커맨드 창을 불러와서 O를 누른다.

5) SD카드를 빼서 보드에 끼고 전원을 올린다.

시리얼 포트로 통신한다.


6) 부팅 시키기
zynq-uboot> boot

id 와 password는 root / root 이다.

7) fesvr-zynq 프로그램으로 소프트코어에서 프로그램을 돌릴 수 있다.
./fesvr-zynq pk hello

8) Mounting the SD Card on the Board

root@zynq:~# mkdir /sdcard
root@zynq:~# mount /dev/mmcblk0p1 /sdcard

할 일을 끝냈으면 unmount 한다.

root@zynq:~# umount /sdcard


Building Everthing from scratch

먼저 JDK와 SBT가 필요하다.

JDK 는 알아서 다운로드, SBT는 다음과 같이 다운로드한다.

echo "deb https://dl.bintray.com/sbt/debian /" | sudo tee -a /etc/apt/sources.list.d/sbt.list
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2EE0EA64E40A89B84B2DF73499E82A75642AC823
sudo apt-get update
sudo apt-get install sbt


아래 포스트는 무시할 것. 쓰다가 날라가서 내용이 정확하지 않습니다.
2. Pushing Your Rocket Modifications to the FPGA


1) Setting Up Workspace

rocket 카피가 없다면 다음 명령어로 클론한다.
$ cd [fpga-zynq dir]/zedboard
$ make init-rocket-submodule

쓴게 날라갔다.현재 https://github.com/riscv/riscv-tools#linuxman 에서

3.14.79 linux curl 까지 하고 집에 감.

Configuring the Linux Kernel 부터 해볼 것.

Linux configure 시에
$ make ARCH=riscv menuconfig
/ HTIF 의 다섯번째 옵션 HTIF_RFB 는 n으로 할 것

주의! busybox make menuconfig 시에
  • CONFIG_STATIC=y, listed as "Build BusyBox as a static binary (no shared libs)" in BusyBox Settings → Build Options
  • CONFIG_CROSS_COMPILER_PREFIX=riscv-linux-, listed as "Cross Compiler prefix" in BusyBox Settings → Build Options --> riscv64-unknown-linux-gnu- 로 바꿀 것.
  • CONFIG_FEATURE_INSTALLER=y, listed as "Support --install [-s] to install applet links at runtime" in BusyBox Settings → General Configuration
  • CONFIG_INIT=y, listed as "init" in Init utilities
  • CONFIG_ASH=y, listed as "ash" in Shells
  • CONFIG_ASH_JOB_CONTROL=n, listed as "Ash → Job control" in Shells
  • CONFIG_MOUNT=y, listed as "mount" in Linux System Utilities