2015년 11월 9일 월요일

Installing NASM,Eclipse and QEMU on Macbook Pro 2015 early

My development Environment
Macbook Pro 2015 early
OS X 10.11.1 El Capitan


I am studying to make Operating System. So I am downloading and installing programs.

It is a part of process. 

At first, Download and install Homebrew.  (It is easy tool to download and install programs)


$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

-How to install NASM
$brew install nasm
-How to install Eclipse
click download button on http://www.eclipse.org/ and
Eclipse IDE for C/C++ Developers 
-How to install Java Runtime Environment(JRE)
enter http://www.oracle.com/technetwork/java/index.html 
then, click downloads, Java Runtime Environment
-How to install QEMU
$brew install qemu 
how to launch
$qemu-system-x86_64

2015년 11월 8일 일요일

Make Cross-Compiler(2); How to Build and Install GCC on Macbook Pro 2015 early

- My Development Environment
Mac OS X 10.11.1 El Capitan
already installed Binutils
already installed Xcode

It is similar to build and install Binutils but your time can waste too much.
Please do this when you have enough time.

- Procedure

1. Download  GCC Source codes at https://gcc.gnu.org/ (click 'our mirror sites' after clicking any versions)

2. extract your files
 example)  $ cd ~/Downloads/
                 $ tar -zxvf gcc-5.2.tar.gz  (tar.gz files can extract as zxvf command.)
                 $ cd gcc-5.2   (move to ~/Downloads/gcc-5.2/)
3. downloads libraries when your computer need as this command.
 $ ./contrib/download_prerequisites

4. setup your platform and location.
$ export TARGET=x86_64-pc-linux
$ export PREFIX=/opt/cross  (<- this location is same to setup binutils)

 Confirm .bash_profile  (It is already have after doing Make Cross-Compiler(1))
 You can see
export PATH=/opt/cross/bin:$PATH
when you type  $cat ~/.bash_profile

5. build and install

$ ./configure --target=$TARGET --prefix=$PREFIX --enable-64-bit-bfd --disable-shared --disable-nls
$ make configure-host
$ make LDFLAGS="-all-static"
$ sudo make install

6. How to test gcc cross-compiler after install that.
$ /opt/cross/bin/x86_64-pc-linux-gcc -dumpspecs | grep -A1 multilib_options

result

I use too much time. cheer up! . It is really hard to me. So I leave this text.


-My Problems
C compiler cannot create executables when I type $./configure ~~~blar~~~
Solve this problem to delete installed binutils then to reinstall them in my case.
$rm -rf /opt  can removes all the binutils.  ***Use caution when you type rm command.


References
Book <64비트 멀티코어 OS 원리와 구조>

Procedure of Explanation.
http://nayuta.net/64%EB%B9%84%ED%8A%B8_%EB%A9%80%ED%8B%B0%EC%BD%94%EC%96%B4_OS_%EC%9B%90%EB%A6%AC%EC%99%80_%EA%B5%AC%EC%A1%B0/OS_X%EC%97%90%EC%84%9C_%EA%B0%9C%EB%B0%9C%ED%99%98%EA%B2%BD_%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0

2015년 11월 7일 토요일

Make Cross-Compiler(1); How to Build and Install GNU Binutils on Macbook pro 2015 early


-My Development Environment
 Mac OS X 10.11.1 El Capitan  on Macbook pro 2015 early
 already installed Xcode

* '$' means Teminal Command

- Procedure
Before typing on Command Line.
 Download Binutils 2.25.1.tar.gz  from http://www.gnu.org/software/binutils/
and type these
$ tar -zxvf Binutils 2.25.1.tar.gz
$ cd binutils-2.25.1


 1. Type These Commands
    $ export TARGET=x86_64-pc-linux
    $ export PREFIX=/opt/cross      <- This location(/opt/cross) can be any folders which you want.

2. Type  $ cd ~/
             $ ls -a
 and  find .bash_profile or .profile  If you don't have make .bash_profile to use Vim
($ vim .bash_profile)

3. Type   export PATH=/opt/cross/bin:$PATH

4. Save and quit
     ESC button and :wq

5. Type

  $ ./configure --target=$TARGET --prefix=$PREFIX --enable-64-bit-bfd --disable-shared --disable-nls

  $ make configure-host
  $ make LDFLAGS="-all-static"

then when your computer is no problem,  type $ sudo make install   then input password


-References

Book <64비트 멀티코어 OS 원리와 구조 -한빛미디어>
Sites
http://nayuta.net/64%EB%B9%84%ED%8A%B8_%EB%A9%80%ED%8B%B0%EC%BD%94%EC%96%B4_OS_%EC%9B%90%EB%A6%AC%EC%99%80_%EA%B5%AC%EC%A1%B0/OS_X%EC%97%90%EC%84%9C_%EA%B0%9C%EB%B0%9C%ED%99%98%EA%B2%BD_%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0


How to setup GCC (GNU Complier Collections) on Mac OS X and test to use Vim.

If you contact GCC firstly as this page, please don't believe everything. quest yourself about this page.

 My development environment
: Mac OS X 10.11.1 El Capitan on Macbook pro 2015 early
  Xcode 6.3.1

* I am studying the book; 64비트 멀티코어 OS 원리와 구조.  GCC installation is first procedure for it.
  It is similar to '2.1 GCC 설치' page 50 to  '2.2 크로스 컴파일러 만들기' page 69. but It is for Windows. So I need to do on Mac OS X.

1. Open Terminal
 (Ctrl+ Space)  terminal.app

2. type   $xcode-select --install     (* "$" means on terminal)
    *If you don't know you have GCC or not, type this sentence $ gcc --version

3. click Install(설치)

4. type, too. $gcc -v

completed installation GCC.


until now, how to test GCC on Vim
Vim (old version Vi) is already installed on Mac OS X.
open your terminal.

$vi File_Name       example) $vi test.c

1. Can input codes after pushing a or i or u button.

#include <stdio.h>

int main( int argc, char** argv)
{
     printf("Hello World\n");
     return 0;
}

2. push ESC.

3. when your cursor located bottom, type :w       (it means save)

[Common Test]

4. $gcc -o test.out   (It makes test.out file and It is for test)

5. $ ./test.out   

You can see  Hello world


[My case Test]
4. $gcc -m32 -o test32 test.c
    $gcc -m64 -o test64 test.c 

5. $./test32
    $./test64

If you see  Hello World,  Your GCC can apply 64bit and 32bit.






'ls' command to see files on this location.


-Reference
Book <64비트 멀티코어 OS 원리와 구조 1>

How to use Vim (in Korean)
http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/Vim  

Setup Development Environment for 64비트 멀티코어 OS 원리와 구조
http://nayuta.net/64%EB%B9%84%ED%8A%B8_%EB%A9%80%ED%8B%B0%EC%BD%94%EC%96%B4_OS_%EC%9B%90%EB%A6%AC%EC%99%80_%EA%B5%AC%EC%A1%B0/OS_X%EC%97%90%EC%84%9C_%EA%B0%9C%EB%B0%9C%ED%99%98%EA%B2%BD_%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0


2015년 10월 20일 화요일

[Toon] In short, Martion






I have watched the movie; Martion. There are only Heinz and Potato in my head :)
I will going to eat potato in afternoon. Potato is similar to Mars. Is Mars actually Potato?

영화 마션을 봤다. 하인즈 케찹과 감자만 머리에 남아있다. 감자먹어야지. 감자는 화성이랑 비슷하다. 사실 화성은 감자가 아닐까?


Embedded 공부하려고 보는 책

아두이노 쿡북,(JPub)
Embedded Recipes,(Coner Book)
Embedded Sketches,(Coner Book)
Make: 아두이노 DIY 프로젝트, (한빛미디어)
Engineering Circuit Analysis (McGrawHill)
64비트 멀티코어OS 원리와 구조, (한빛미디어)
열혈 C프로그래밍, (오렌지미디어)
C언어로 쉽게 풀어쓴 자료구조 
Operating System Concepts [흔히 말하는 공룡책]
Embedded Linux 기반의 로봇 설계& 제작, (영진닷컴)

갖춰진 책은 이정도 인데, 사실 내가 임베디드를 정말 하고 싶은 걸까라는 생각도 물론 든다. 
이것 저것 불안해서 생각하는 면도 있는 듯함. 개인적으로는 웹프로그래밍도 Opentutorials.org 에서 보고, 나는 전자공학인 반면, 동생은 컴퓨터공학이라서 컴공 책은 쉽게 얻어 볼 수 있다는 것이 다행이라면 다행이다. 

* 아침형 인간 이라고 자부하는 나인데, 늦잠을 자서 하루를 항상 망치는 기분으로 시작했으나, 간만에 일찍 일어나니 글도 정리하고 이것 저것 생각을 하게 된다. 무엇을 할까 ?


일찍 일어나는 방법

지극히 개인적인 얘기지만, 여태까지 지겹게 들어왔던 알람 그 자체에 내성이 생긴 것이 아닌가 싶다. 여태까지의 노력은 알람의 횟수를 늘리고, 알람시간을 변경하고, 취침시간을 달리해보고(수면시간의 변화) 다른 알람앱을 받아 보고 였지만, 나를 깨우는 그 알람 음악이 문제였던 거라... 
 인간의 목소리로 알람을 바꾸어보니, 첫 마디에 바로 깨더라. 
*PD대정령 씨의 "일어나 일단 일어나서 당장 씻어 씻으면 잠깨" 말을 들으니, 일어나자 마자 비몽사몽인 사람에게 바로 그렇게 행동하게 주입을 해주더라.  
 알람을 끄는 방식은 '알람이' 앱으로 사칙연산 '상' 혹은 '최상' 난이도 였는데 나의 멍청함이 아침부터 느껴짐. 문제가 70 X 11 이였음.  711, 770 등을 계속하며 엄청 틀린듯...   (답은 781임. ) 

2015년 7월 15일 수요일

에빙하우스의 망각곡선


에빙하우스의 망각곡선에 의하면, 인간은 학습한 이후 10분 부터 약 50퍼센트 가량의 기억을 잃는다.  이 망각을 극복하기 위해서는 반복이 필요하다고하며, 많은 학습법 관련 강의나 다양한 매체에서 언급한다. 이에 따르면10분 후 복습, 1일 후 복습, 일주일 후 복습, 한달 후 복습  이렇게 4번의 복습을 하는 것이 암기하기 위한 방법이라고 생각된다. 문제는 이것을 언제 복습해야하는지 복습을 했는지를 기록하는 것인데, 매일 새로운 것을 공부하고 모든 것에 대해 복습여부 기록하기가 힘드므로, 노트정리를 했다면, 노트정리 위에 날짜와 네개의 체크리스트 (ㅁㅁㅁㅁ) 를 만들어 순서대로 10분, 하루, 일주일, 한달 로 체크한다면, 복습을 했는지 체크할 수 있을 것이라고 방법을 생각했다. 책으로 하는 경우 일정 량을 지정하여, 그 시작부분에 같은 방식으로 할 수 있을 것이라고 생각된다.  방법은 생각 했으니, 이제 실천의 문제 뿐일 것이다.

아마추어 수학자가 읽어야 할 책



페이스북은 접은지 꽤 되었는데 구글링 하던 중에 생활코딩의 페북 페이지를 보아서 올린다.  이분의 말씀대로 수학에 흥미를 먼저 붙여야 수학을 자연스럽게 할 수 있을 것이라고 생각한다.

2015년 1월 6일 화요일

[C언어] 함수의 네가지 기본형태에 대한 이해


 Add(), ShowAddResult(), ReadNum(), HowToUseThisProg()
각각 반환과 인자전달의 유무가 다른 네개 형태의 사용법에 대한 코딩이다.
이렇게 작성하면 반환 값? 인자전달? 이라는 의문이 들 수도 있는데,

 인자란 함수 사용시에 사용하는 값, 반환 값은 일반적으로 함수내의 결과 값을 의미한다고 할 수 있다. 
 다른 말로하면, Add함수에서 int(정수) 형태의 num1과 num2 의 값을 받아들여 그것으로 함수가 갖는 계산을 한다고 할 수 있다. 물론 함수마다 어떤 계산일지는 다르겠지만,
 Add 에 한해서는 num1+num2의 계산이다. return num1+num2; 라고 되어있는데, 더하기와 동시에 그 값을 반환; 즉, Result =Add(int num1,int num2); 라고할 때 Result 값은 num1, num2 의 합이 되는 것이다. 더 쉽게 Result= Add(3,4); 라고 하면 Result 값에 3과 4의 합; 7을 Result에 대입하는 것이다.

 반환 값이 없는 경우에는 대표적인 경우가 ShowAddResult()처럼 함수내의 printf()함수가 있는 경우이다. printf()자체가 모니터로 반환한다는 의미로 볼 수 있다. (*깊이 들어가면 printf()함수는 글자열의 길이를 반환값으로 갖는 함수이다. 그 말은 즉, ShowAddResult()를 반환이 가능한 함수로 만들고 return printf(); 할 경우 문자열의 길이 값을 반환 하게도 만들 수 있다는 의미이다.) 괄호안의 말은 깊이 이해하지 않아도 되며, 이 문제를 쓴 저자는 함수를 간단히 설명하기 위해 사용한 것이므로, 인자만 받아서 반환하지 않는 함수로 사용할 수 있구나... 하고 이해하면 된다.

 세번 째의 ReadNum() 함수를 보면, 반환 값만 있다. ReadNum(); 이라고 선언한 것이 scanf("%d",&num); 을 간단히 하기위한 장치라고 할 수 있다. 물론 ReadNum()으로만 선언만 하면 결과 값을 컴퓨터에서만 가질 뿐 이걸 이용하기 위해서는 그림과 같이 num1=ReadNum(); 식으로 사용하면 ReadNum() scanf로 입력받은 값을 num1에 저장한다.

 마지막으로, HowToUseThisProg() 함수는 인자(입력)도 반환(출력)도 없다. 무엇인가 기본적으로 모니터상으로 보여주고 싶은 문구가 있을경우 printf("블라블라블라 \n"); 의 형태로 사용할 수도 있지만, HowToUseThisProg(); 선언만으로 같은 결과를 도출할 수 있다니 얼마나 간편하겠는가. (문자의 길이부터) 물론 함수선언이 차지하는 공간이 있긴 할테지..

 예제를 거의 가져온데다가 내 생각을 덧붙인 것 뿐이지만, C언어에서는 함수가 시작이고 끝이고 심지어 int main() 메인 함수또한 함수인 모든 함수 형태이므로 함수는 정말정말정말 중요해서, 블로그 글에 게시한다. 항상 4가지가 있다는 것을 기억하자.
 1. 인자와 반환 값이 있는경우        example)    Add()
 2. 인자는 있고 반환값이 없는경우                   ShowAddResult()
 3. 인자는 없고 반환값이 있는경우                   ReadNum()
 4. 인자도 반환값도 없는경우                          HowToUseThisProg()

References  <열혈C프로그래밍> -윤성우 저 오렌지미디어  214page SmartAddFunc.c




[C언어] if ~else if 문의 switch case 문 변화

문제는 
if(n>=0 && n<10) printf("0이상 10미만\n");
else if(n>=10 && n<20) printf("10이상 20미만\n");
else if(n>=20 && n<30) printf("20이상 30미만\n");
else printf("30이상\n");

의 형태의 if...else if 문을 억지로 switch case문으로 바꿔보라는 이야기 였다.
case 문의 특성상 범위조절이 아닌 값을 의미하므로 나의 경우는 위의 그림과 같이 일일히 자연수 case 를 전부 넣었지만 솔루션은 이 방법이 아니였다. 
 물론 나의 코드 작성 방법에도 문제가 있는데, 입력받은 값이 (물론 정수로 선언하긴 하였지만) float형태(소수형태) 일 경우 가 성립하지 않을 수 있다는 것이다.

 솔루션에서는 switch(n/10)으로 10으로 나누어 문제를 해결했다.
10으로 나눌경우 정수형 선언이기에 나머지가 떨어져 나가므로, 
복잡하게 안하고, 주석처럼 case 0: case 1: case 2: default: 만으로 해결 할 수 있게 된다.

참조한 책은 200p 문제 08-3 윤성우 저자의 <열혈 C프로그래밍> 오렌지미디어. 이다.
정말 C프로그래밍 책에서 추천할 만 하며, 생각해볼 수 있게 잘쓰여진 좋은 책이다. 2학년때 사서 현재까지 붙잡고 있지만, 열심히 하자는 마음가짐에 C기초를 단단히 잡고 싶어 다시 시작 하였다. 
 굉장히 빠른 스피드로 진행해 나가다가, 이문제에서 막혀서 블로그에 글을 올린다. 나중에도 기억하고 싶어서.