'프로그래밍'에 해당되는 글 4건

  1. 2007.10.10 Ubuntu에 EZ-X5 크로스컴파일 환경 만들기
  2. 2007.09.28 소수 구하기
  3. 2007.09.12 귓속말 전달하기 게임.
  4. 2007.09.06 남아선호사상은 실제론 성비에 별 영향을 안미친다? (5)

Ubuntu에 EZ-X5 크로스컴파일 환경 만들기

|
우분투에서 EZ-X5를 다루기 위해서 툴을 설치하는 과정이다.
지금 직접 하면서 하나하나 과정을 적어 나가겠다.
sudo aptitude install build-essential libncurses5 libncurses5-dev kernel-package fakeroot minicom lrzsz
필요한 패키지를 깔아준다. 위에 언급한 패키지 외에도 필요한 패키지가 있으면 깔아준다.

1.
armv5l용 binutils 설치
먼저 binutils-2.13.90.0.16.tar.gz를 다운받아서 gcc-3.2.1-oerlikon.patch로 패치한다.

tar zxvf binutils-2.13.90.0.16.tar.gz
patch -p1 < binutils-2.13.90.0.16-oerlikon.patch
binutils버젼중 저 버젼을 받은 것은 falinux에서 준 CD에 들어있는 버젼이라서이다.
나는 컴파일시 에러로 2.18버젼을 받아서 압축을 풀었다.
tar zxvf binutils-2.18.tar.gz
다른 버젼을 원하면 'http://ftp.gnu.org/gnu/binutils/'에서 받을 수 있다.그 다음은 압축풀린 폴더로 가서 configure을 해준다.
cd binutils-버젼
./configure --target=armv5l-linux --prefix=/usr --with-cpu=xscale --nfp
그리고 컴파일 후 설치한다.
make
sudo make install
그 후 /etc/enviroment에 PATH를 추가해준다.
sudo vi /etc/enviroment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/armv51l-linux/bin"

2. armv5l용 gcc설치

gcc-3.2.1.tar.gz을 다운받아서 압축을 풀고 gcc-3.2.1-oerlikon.patch로 패치한다.
tar zxvf gcc-3.2.1.tar.gz
patch -p1 < gcc-3.2.1-oerlikon.patch
몇가지 수정이 필요한 파일이 있다. 수정을 한다.
perl -pi -e 's/^(TARGET_LIBGCC2_CFLAGS.*)/$1 -Dinhibit_libc -D__gthr_posix_h/' gcc/config/arm/t-linux
echo 'T_CFLAGS = -Dinhibit_libc -D__gthr_posix_h' >> gcc/config/arm/t-linux

위 버젼이 아닌 다른버젼을 받아도 된다. 'ftp://ftp.gnu.org/gnu/gcc'에 가면 다른버젼을 받을 수 있다. linux kernel버젼 2.6을 쓴다면 3.4버젼으로 컴파일 할것을 추천하고 linux kernel2.4버젼을 쓴다면 3.3이하 버젼을 써야 한다.
configure 을 해준다.
./configure --target=armv5l-linux --prefix=/usr --with-headers=/보드용 커널 위치/linux/include --disable-shared --disable-threads --enable-languages="c" --nfp --with-cpu=xscale --without-fp --with-softfloat-support=internal
컴파일러가 4.x대이면 Makefile에서 3.x버젼으로 수정하여야한다.
vi Makefile
CC=gcc-3.x
컴파일하고 설치한다.
make
sudo make install
make하면 에러 나는데 임시 해결방법은 '--with-headers=/home/junichel/src/tools/linux/include' 를 제거하고 설치하면 된다.

3. armv5l용 glibc 설치
glibc-2.3.2.tar.gz와 glibc-linuxthreads-2.3.2.tar.gz를 다운받아 같은 폴더에 압축을 푼다.
tar zxvf glibc-2.3.2.tar.gz
tar -C glibc-2.3.2 -zxf glibc-linuxthreads-2.3.2.tar.gz
폴더로 들어가 configure한다.
mkdir build
cd build
../glibc-2.3.2/configure armv5l-linux --build=i686-pc-linux-gnu --with-headers=/보드용 커널 위치/linux/include --enable-add-ons --enable-shared --prefix=/usr/armv5l-linux --with-cpu=xscale --without-fp --enable-kernel=2.4.19
glibc-2.3.2/include/libc-symbols.h 를 수정한다.
vi glibc-2.3.2/include/libc-symbols.h
내용중
__make_section_unallocated ("__libc_freeres_ptrs, \"aw\", @nobits") \
를 찾아서
__make_section_unallocated ("__libc_freeres_ptrs, \"aw\", %nobits") \
로 고친다.
glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h 를 수정한다.
vi ../glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h
내용중
ENTRY (name)
을 찾아
ENTRY (name);
으로 고친다.

vi ../glibc-2.3.2/linuxthreads/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h
컴파일 하고 설치한다.

make
sudo make install
아직 다 못잡았다.

4. 커널 컴파일
커널을 풀고, 설정한다.
make ez-x5_config
make oldconfig
make menuconfig
make dep
gcc버젼에 따라 약간의 수정이 필요하다.
vi ./arch/arm/Makefile
아래를 찾아
CFLAGS_BOOT     :=$(arch-y) $(tune-y) -mshort-load-bytes -msoft-float
CFLAGS +=$(arch-y) $(tune-y) -mshort-load-bytes -msoft-float
AFLAGS +=$(arch-y) $(tune-y) -mno-fpu -msoft-float
이와 같이 고친다.
CFLAGS_BOOT     :=$(apcs-y) $(arch-y) $(tune-y) $(call check_gcc,-malignment-traps,-mshort-load-bytes) -msoft-float -Uarm
CFLAGS          +=$(apcs-y) $(arch-y) $(tune-y) $(call check_gcc,-malignment-traps,-mshort-load-bytes) -msoft-float -Uarm
AFLAGS          +=$(apcs-y) $(arch-y) -msoft-float

커널을 컴파일한다.

make zImage
만약  hardware FP관련 에러가 난다면 ./arch/arm/Makefile에서 -mno-fpu 와 -msoft-float 도 빼 줘야 한다.
ㅠㅠ 아직 에러때문에 헤메고 있다.
에러는 하나씩 하나씩 나타난다.

5. 대안
falinux에 가보면 레드헷이나 페도라용으로 rpm패키징 된 것이 있다. 압축 풀어서 usr에 덥어씌우고 PATH지정하면 잘 된다.
몇일 동안 한 삽질은?!! -바보인 것인가?


신고

'장난질' 카테고리의 다른 글

MD5 닉네임 배틀  (0) 2007.10.18
재미있는 퍼즐게임 - Bloxorz.  (0) 2007.10.11
Ubuntu에 EZ-X5 크로스컴파일 환경 만들기  (0) 2007.10.10
소수 구하기  (0) 2007.09.28
귓속말 전달하기 게임.  (0) 2007.09.12
내가 쓰는 노트북 환경  (0) 2007.09.06
Trackback 0 And Comment 0

소수 구하기

|
수소란 수학적으로 1 이외에 1과 자기자신만을 약수로 가지는 수이다.
정의를 가만히 살펴보면 우선 1은 소수에서 제외시켜야 한다. 그리고 자기자신 이외의 수로 나누어 떨어지면 안된다.
이것을 그대로 C언어로 옮기면 다음과 같다.
#include <stdio.h>
int PrimeCheck(int num)
{
    int temp=2;
    if(num!=1)
        while(num%temp)
            temp++;
    if(temp==num)
            return 1;
    return 0;
}


소수면 1을 리턴하고 아니면 0을 리턴하는 함수이다.
일단 1이 아니어야 하니 제일먼저 제외시키고, 자기자신 이외의 수로 나누었을 때 나누어 떨어지지 않아야 하니 떨어지는 수중 자기자신과 다른수가 나오면 제외시켜야 한다.
프로그래밍은 컴퓨터에게 말을 거는 것과 같다. 점점 프로그래밍 실력이 는다는 것은 점점 컴퓨터와 이야기가 더 잘 통하게 되었다는 것 아닐까?
신고
Trackback 0 And Comment 0

귓속말 전달하기 게임.

|
어제 수치해석 시간에 교수님께서 또 간단한 문제 하나를 내주셨다.
귓속말로 말 전달하기 게임에 대해 생각해보자.
어떤 세상에는 착한사람과 덜 착한사람이 있다. 착한사람은 들은 그대로 말을 전달하고 덜 착한사람은 진실을 들으면 거짓으로 거짓을 들으면 진실으로 이야기한다고 한다.
만약 착한 사람이 0.99 있을 때 덜 착한 사람이 0.01 존재한다면 게임이 끝났을 때 최종적으로 진실을 알고 있는 사람수와 거짓을 알고 있는 사람수는 어느정도 되는가?
귓속말 게임을 하는 사람수는 임의로 정하라.

오늘은 3교시부터 9교시까지 전공 4과목이 몰려있는 날이라 수업끝나고 잠시 쉴겸해서 간단한 프로그래밍을 해봤다.
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>

#define    PEOPLE    100    //귓속말 놀이하는 사람수
#define    GOODMAN    99    //착한 사람 가능성
#define    NOTGOODMAN 1    //덜 착한 사람 가능성

int main(int argc, char *argv[])
{
    int people, known=1, t=0, f=0;
    srand(time(0));
    for(people=1;people!=PEOPLE+1;people++)
    {
        //조금 덜 착한 사람이 거짓을 사실로 사실을 거짓으로 바꾼다.
        if(rand()%(GOODMAN+NOTGOODMAN) > GOODMAN-1)
            known*=-1;
        if(known==1)    //아는 것이 사실이다면
        {
            t++;
            printf("진실\t");
        }
        else{    //아는 것이 거짓이다면
            f++;
            printf("거짓\t");
        }
    }
    printf("\n귓속말 놀이 사람들의 수는 %d명 입니다.\n진실을 아는 사람은 %d 명\n거짓을 아는 사람은 %d 명\n",people-1,t,f);
    return 0;
}

이 프로그램을 역시 여러번 실행시켜본 결과는 약간의 흥미를 유발한다. 진실을 거짓으로 거짓을 진실으로 왜곡하는 사람은 극소수지만 그 극소수로 인해서 정말 진실을 알고 있는 사람이 50%를 넘기 힘들다는 것이다.
사람수를 늘려서 해본 결과 사람이 많아지면 많아질수록 50:50에 근접하게 된다.

과연 실제 세상에서 저런 귓속말 전달하기를 하면 어떻게 다를까?


신고
Trackback 0 And Comment 0

남아선호사상은 실제론 성비에 별 영향을 안미친다?

|
수치해석 시간에 교수님께서 간단한 문제를 이야기 하셨다.
어떤 가상의 나라에 한 마을에 100가구가 있는데, 그 마을은 남아를 선호한다고 한다.
나라의 법칙상 아이는 5명까지 낳을 수 있다고 하는데
아들을 낳고 다음 아이를 낳지 않을 확률은 70%이고, 딸을 놓고 다음아이를 낳지 않을 확률은 30%라고 한다.
만약 임신중절이나 별 다른 방법을 쓰지 않고 오로지 자연적인 출산을 할 때의 그 마을 아이들의 성비를 구하라.
수업이 끝나고 공부를 하다가 머리를 식힐겸 간단한 프로그래밍을 해봤다.
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>

#define    PEOPLEMAX    100
#define    BESTTIMES    5
#define    MEND    70
#define    WEND    30

int main(int argc, char *argv[])
{
    int people, times, m=0, w=0;
    srand(time(0));
    for(people=1;people!=PEOPLEMAX+1;people++)
    {
        printf("\n%d번째 집 : \t",people);
        for(times=1;times!=BESTTIMES+1;times++)
        {
            if(rand()%2 == 0)
            {
                m++;
                printf("아들 \t");
                if(rand()%101 <MEND)
                    break;
            }
            else{
                w++;
                printf("딸 \t");
                if(rand()%101 <WEND)
                    break;
            }
           
        }
    }
    printf("\n마을의 아들은 %d명 딸은 %d명 입니다. \n성비는 %d : %d\n",m,w, m*100/(m+w),w*100/(m+w));
    return 0;
}
컴파일하고 실행시켰더니 웬걸.  오히려 아들이 많을 때도 있고, 딸이 많을 때도 있더라.

아들이 많을 경우는 아들만 낳고 그만두기 때문이고 딸이 많을 때는 아들을 낳기 위해 여러번 출산하기 때문이다.
따라서 실제로는 성비가 5:5에 가깝게 나타난다. 이것은 마을의 인구를 늘려도 마찬가지다.

실제 세상에서는 아들을 선호하기는 하지만 여러명 낳을 경우의 부담과, 딸만 놓고 그만두는 경우를 생각하면 아들 하나만 낳는 경우도 많기에 실제로는 딸이 더 많은 것이 아닐까?

ps.
  1. 재미있는 점은 현실에서처럼 딸부자집이 상당히 많다는 것입니다.
    대신에 아들이 있는 집은 독자거나, 아래로 남자형제 혹은 여자형제 한명정도 있거나, 위로 여자형제가 여럿있는 집이 많아지더군요.

  2. 위 조건에서 5:5인것은 선택하는 것이 다음아이를 낳는 것이지 아들과 딸을 낳는 것을 선택하는 것은 아니기 때문입니다.
    현실에서 실제로는 1.1:1정도라니 아들이 많은 것은 당연해 보이지만 여러가지 자료에 의하면 첫째 아이가 딸 일경우 둘째는 아들일 경우가 통계적으로 무척 많다고 하더군요. 물론 실제 성감별을 한다거나 하는 것은 논외로 칩니다.

신고
Trackback 0 And Comment 5
  1. Favicon of http://gaver.org BlogIcon 게이버 2007.09.06 21:28 신고 address edit & del reply

    그러나 현재 실제 성비율은... =ㅁ=;

  2. Favicon of http://junichel.tistory.com BlogIcon Junichel 2007.09.06 23:44 신고 address edit & del reply

    재미있는 점은 현실에서처럼 딸부자집이 상당히 많다는 것입니다.
    대신에 아들이 있는 집은 독자거나, 아래로 남자형제 혹은 여자형제 한명정도 있거나, 위로 여자형제가 여럿있는 집이 많아지더군요.

  3. Favicon of http://junichel.tistory.com BlogIcon Junichel 2007.10.10 14:41 신고 address edit & del reply

    위 조건에서 5:5인것은 선택하는 것이 다음아이를 낳는 것이지 아들과 딸을 낳는 것을 선택하는 것은 아니기 때문입니다.
    현실에서 실제로는 1.1:1정도라니 아들이 많은 것은 당연해 보이지만 여러가지 자료에 의하면 첫째 아이가 딸 일경우 둘째는 아들일 경우가 통계적으로 무척 많다고 하더군요. 물론 실제 성감별을 한다거나 하는 것은 논외로 칩니다.

  4. 정상적으로 아들,딸 태어나는 비율이다 2009.06.08 00:11 신고 address edit & del reply

    전쟁,기아,성감별 낙태,자연재해등의 이상현상 없이 정상적으로 남아와 여아가 태어날 경우 여아100명당 선진국은 남아105, 개도국은 남아103, 후진국은 남아100 정도 태어나야 정상이라고 한다...알간??

    • Favicon of http://junichel.tistory.com BlogIcon Junichel 2009.06.08 22:35 신고 address edit & del

      모르는 것은 아닙니다만 많이 아는만큼 예의도 차려 주시죠?

prev | 1 | next

티스토리 툴바