'임베디드'에 해당되는 글 112건

  1. 2006.10.16 [u-boot] u-boot에서 커널에 bootargs넘겨줄지 여부는...
  2. 2006.10.16 [u-boot]u-boot에서 커널로 bootargs 넘겨주기
  3. 2006.10.13 [u-boot]아싸~ 성공 1.1.4 - 061013
  4. 2006.10.12 [U-Boot] 아~ 결국 1.1.4는 포기 - 061012
  5. 2006.10.11 [U-BOOT] 실패! flash 가 8bit.... - 061011
  6. 2006.10.10 [U-BOOT] short-load-bytes에러시
  7. 2006.09.20 [U-boot] examples에서 컴파일 문제
  8. 2006.09.15 [Arm] GPIO 제어 디바이스 드라이버
  9. 2006.09.15 [Arm] LFS를 이용한 ramdisk 구축
  10. 2006.09.15 [Arm] libtermcap 라이브러리 설치

[u-boot] u-boot에서 커널에 bootargs넘겨줄지 여부는...

include/configs/설정파일.h에서
#define CONFIG_CMDLINE_TAG 1로 설정한다.
이와 관련된 내용들은 include/asm-arm/setup.h & lib_arm/armlinux.c에 있다.



powered by performancing firefox




[u-boot]u-boot에서 커널로 bootargs 넘겨주기



제목: [질문] u-boot의 bootargs를 리눅스 커널로 어떻게 넘기는지 궁금합니다.

글쓴이: pleasantman
글쓴날: 2006년 06월 16일 오전 10:54
URL : http://kelp.or.kr/korweblog/?story=06/06/16/2841519



안녕하세요? 고도리님
김경호 입니다.
clabsys의 LN2410sbc보드를 기반으로 S3C2410보드 작업을 하고 있습니다.
커널은 2.4.20이며 u-boot는 1.0.1입니다.

이숍보드의 배포된 2.4대 커널과 u-boot-1.1.2에서는
bootargs부분이 잘 전달되었는데요..

위의 환경에서는 전달이 되지 않는군요.

우선 부트 첫머리에
===============================================
Linux version 2.4.20_CLabSys_elfin-r1.0 (root@BoBos)
(gcc version 2.95.3 20010315 (release))
#7 2006. 06. 15. (紐? 21:13:45 KST
CPU: ARM/CIRRUS Arm920Tid(wb) revision 0
Machine: CLABSYS-LN2410SBC
Warning: bad configuration page, trying to continue
On node 0 totalpages: 16384
zone(0): 16384 pages.
zone(1): 0 pages.
zone(2): 0 pages.
Kernel command line: console=ttyS0,115200 root=/dev/nfs rw
nfsroot=10.253.21.213:/korea-dokdo/nfsroot/rootfs-aesop
ip=10.253.21.216:10.253.21.213:10.253.253.3:255.255.0.0::eth0:off
ethaddr=08:00:3e:26:0a:5b
===============================================
라고 나옵니다.
위의 표시된 "Kernel command line:"은 menuconfig에서 넣어준 겁니다.

어느 부분을 맞춰줘야 "Kernel command line:" 에 u-boot의 bootargs를
전달할 수 있을까요?

bootargs를 개발 시에 변경하면 nfs혹은 ramdisk로 변경이 가능해서 의외로
편리하게 사용이 가능하더군요..



글쓴이: Anonymous
글쓴날: 2006년 06월 16일 오후 02:53

^^, 아뒤를 안썼넹...



2442를 안하는 이유는 제가 그것을 가지고 밥먹고 살지 않기 때문입니다.

즉, 2442를 개발할 일이 전혀 없습니다.



2440의 경우는 salamander님이 개인돈을 꽤 많이 들여서 개발하신거였지만

(물론, 용도는 aesop project용이었습니다. 상용화는 전혀 생각이 없었던...)



2442 개발에 들어가는 비용을 동호회 레벨에서 한다는 자체가 불가능합니다.

부품이야 그렇다 치지만, 1~2회 정도의 테스트용 보드 뜰때 꽤 많은 비용이

나갑니다. 그걸 개인이 할 수는 없지요



hw적인 입장에서야 2440이랑 2442가 완전히 틀린것이지만

sw입장에서는 거의 같습니다. clock쪽만 패치하면 돌아가는 걸로

알고 있습니다.



aesop board의 경우 2440으로는 3차가 마지막일 듯 싶습니다.



3차는 salamander님의 포기해서 진행하지 않으려 했으나,

회사에서 생산할일이 있어서 그 중 일부를 aesop 3차보드로 돌리는겁니다.



ps> aesop site운영도 개인돈을 가지고 하는겁니다. 뭐 돈 벌이가 안되는

일이니깐요...누가 기부하는 돈이 있는것도 아니고용(회원중 한분이

꽤 비싼 장비를 기부하셨습니다만, 동작하다 board가 사망하는통에

대략난감이죠...--;)ㅎㅎ


글쓴이: pleasantman
글쓴날: 2006년 06월 16일 오후 02:42

이론... Makefile를 잘 못 만져서 계속 만들어진 파일이 update가 안되어

그렇군요..

전달 잘 됩니다. ^ ^;



답변 달아주신 위에 분 감사드립니다. 아울러 이숍보드 3차도 기대하고 있습니다.

음.. S3C2440도 좋지만.. S3C2442를 더 기대 했었는데...


글쓴이: pleasantman
글쓴날: 2006년 06월 16일 오후 02:32

넵 물론..



#define CONFIG_CMDLINE_TAG 1



넣어 줬습니다.... ^ ^;


글쓴이: Anonymous
글쓴날: 2006년 06월 16일 오전 11:58

u-boot의 configuration file의 맨 밑에...



#define CONFIG_CMDLINE_TAG 1



이 있어야 부트로더게 커널로 넘어갑니다.


KELP - Korea Embedded Linux Project




powered by performancing firefox




[u-boot]아싸~ 성공 1.1.4 - 061013

일단 성공....(글 다 써서 올리는데, 이 망할 이글루는 이상한 에러를 뿌리다 말다 한다. 망할..)
점퍼 셋팅에 문제가 있어서 16bit로 부트로더가 못 돌았다.
점퍼 셋팅은 2개를 가지고 해야한다.
8bit : sw2(1,5,9), jp1(4)
16bit : sw2(2,4,9), jp2(2)
로 설정하면 제대로 부트된다.
* 단, 16bit로 부팅할 때는 콘솔 연결은 직렬포트로 해야한다. 이넘이 cpu I/O랑 직접연결 되어 있어서 그렇다.

1.1.4 부트로더에서 lcd, key초기화까지는 프롬프트 뜨기전에 끝내도록 구현했다.
단, key 초기화에 좀 문제가 있는 거 같다. 예전에 standalone app할 때 구한 KBVR1이랑 지금 나오는 KBVR1값
이 서로 다르다. (삽질 좀 해야겠다.)

*추가*
숨어 있는 sram에 contact하는 방법
+> sram은 cs2에 연결되어 있다. cs2 주소는 0x08000000 당(다운 받은 부트로더가 제대로 동작하더군...)
 


[U-Boot] 아~ 결국 1.1.4는 포기 - 061012

결국~ 1.1.4는 포기했다.(역시 꽁수는 안 통한다.)
but~, 윤대리님이 맹근 1.1.4에서 어느정도 희망이 보인다.
도대체 board에 low_~.S가 어디에 있는 건지 몰겠네...(내가 패치를 잘못했나? 내가 패치한 1.1.4에는 없었다.)
하지만, 역시 불안정...(에러가 나오긴 하는데, 대충 봐서 몰겠다. mac관련해서 에러가 나오는 거 같다.)
일단 1.0에 대충 프롬프트 뜨기 전까지의 동작을 구성한 후에 다시 옮겨 보던지 해야겠다.

헷갈렸던건....소켓에 박혀 있는 넘이 bank 1번으로 8bit flash 512kbyte란다...에공~~
그리고, onboard 되어 있는 넘이 16bit flash로 4mbyte고
점퍼 셋팅은 bank 1이 1,5,9고
bank 2가 2,4,9다.
아~ 짜증


'임베디드 > 7202' 카테고리의 다른 글

[커널] mtd 관련 sst  (0) 2006.10.26
[u-boot] 랜덤 mac 주소와 dhcp - 061017  (0) 2006.10.17
[u-boot]아싸~ 성공 1.1.4 - 061013  (0) 2006.10.13
[U-BOOT] 실패! flash 가 8bit.... - 061011  (0) 2006.10.11

[U-BOOT] 실패! flash 가 8bit.... - 061011

열라 삽질해도 안되는 이유가 역시 있었어...oTL
bank 1은 16비트 flash고, bank 2는 8비트 flash고.....
u-boot start.S에는 16비트로 Reset_Handler이 코딩 되어 있고,
될리가 있나...아~놔...
어셈은 봐봤자.. 눈 뜬 장님이고,
내일은 5520L에 있는 start.S를 고대로 복사 해다가 1.1.4에 넣어서 컴파일하고 때려 넣어 봐야겠다.
(1.0과 1.4 짬뽕...)
안되면 말고...




'임베디드 > 7202' 카테고리의 다른 글

[커널] mtd 관련 sst  (0) 2006.10.26
[u-boot] 랜덤 mac 주소와 dhcp - 061017  (0) 2006.10.17
[u-boot]아싸~ 성공 1.1.4 - 061013  (0) 2006.10.13
[U-Boot] 아~ 결국 1.1.4는 포기 - 061012  (0) 2006.10.12
Posted by shellbt

[U-BOOT] short-load-bytes에러시

제목: u-boot 컴파일시 에러

글쓴이: poohjs
글쓴날: 2006년 10월 09일 오전 09:45
URL : http://kelp.or.kr/korweblog/?story=06/10/09/4727260


안녕하세요. 리눅스초짜입니다.  u-boot를 컴파일하는데 아래와 같은 에러가 나서 
질문드립니다.
$ make make[1]: Entering directory `/cygdrive/d/lang/cygwin/usr/src/rpm/sources/uboot/tools'
make[1]: `.depend' is up to date.
make[1]: Leaving directory `/cygdrive/d/lang/cygwin/usr/src/rpm/sources/uboot/tools'
make -C tools all make[1]: Entering directory `/cygdrive/d/lang/cygwin/usr/src/rpm/sources/uboot/tools'
make[1]: Leaving directory `/cygdrive/d/lang/cygwin/usr/src/rpm/sources/uboot/tools'
armv5l-linux-gcc -Wa,-gstabs -D__ASSEMBLY__ -g -Os -fno-strict-aliasing -fno-common -f fixed-r8
-mshort-load-bytes -msoft-float -D__KERNEL__ -DTEXT_BASE=0x21f00000 -I/cygdrive/d
/lang/cygwin/usr/src/rpm/sources/uboot/include
-fno-builtin -ffreestanding -nostdinc -isys tem
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include -pipe
-DCONFIG_ARM -D__ARM__ -mapcs-32 -mar ch=armv4 -mtune=arm7tdmi
-c -o cpu/at91rm9200/start.o
/cygdrive/d/lang/cygwin/usr/src/rpm/sources/uboot/cpu/at91rm9200/start.S
cc1: error: invalid option `short-load-bytes'
make: *** [cpu/at91rm9200/start.o] Error 1
gcc는 버전 3.4.1 쓰고 있습니다.
인터넷을 돌아보니 gcc버전 문제일 것이라는 얘기가 있더군요.
그래서 2.9.5를 깔아서 하면 syntax error가 뜨고...
쩝.. 정확히 어찌 고쳐야 할지 좀 알려주세요 ㅠ.ㅠ

글쓴이: Anonymous
글쓴날: 2006년 10월 09일 오후 01:23

해당버젼의 GCC는 short-load-bytes옵션이 사라지고 기본으로 포함되었습니다.
-malignment-traps로 바뀌었다고 하네요.

cpu/at91rm9200/config.mk
에서 해당 부분을 삭제해 주세요.

-bid-





Posted by shellbt

[U-boot] examples에서 컴파일 문제

examples 디렉토리는 u-boot에서 지원하는 standalone 프로그램 디렉토리다.
여기에 있는 helloworld나, makefile등을 참고해서 u-boot상에서 돌아가는 프로그램을 만들 수
있는데, 컴파일 하다보면 .srec 나 .bin 을 만들 수 있는 규칙이 없다고, make에서 에러를 종종
내뿜는다.
이유는 makefile안에 있는 묵시적(암시적) 규칙을 make가 모르기 때문에 발생하는데,
해결책은
%.srec: %로 되어 있는 설정을
%.srec: $(OBJS) 로 수정하면 된다.

여기서 $(OBJS)는 .c를 컴파일해서 만들어진 모든 obj파일들이다.

%.bin도 동일한 방법으로 수정해 주면 된다.


powered by performancing firefox




'임베디드' 카테고리의 다른 글

[u-boot]u-boot에서 커널로 bootargs 넘겨주기  (0) 2006.10.16
[U-BOOT] short-load-bytes에러시  (0) 2006.10.10
[Arm] GPIO 제어 디바이스 드라이버  (0) 2006.09.15
[Arm] LFS를 이용한 ramdisk 구축  (0) 2006.09.15
[Arm] libtermcap 라이브러리 설치  (0) 2006.09.15
Posted by shellbt

[Arm] GPIO 제어 디바이스 드라이버


 


 


 


   1. 박진호님의 GPIO 디바이스 드라이버의 소스를 수정하여 작성하였습니다.


   


   2. 개발환경


 


       와우리눅스 파란 7.1


 


 


   1. 컴파일에 필요한 헤더파일들을 확인 합시다..


 


      1-1) 다음의 파일들이 있는가?


 


           /usr/bin/arm-linux-gcc    <=== 이 파일은 꼭 있어야 한다...


           /usr/bin/arm-linux-g++


           /usr/bin/arm-linux-ar


           /usr/bin/arm-linux-ld


           /usr/bin/arm-linux-nm


           /usr/bin/arm-linux-strip


           /usr/bin/arm-linux-objcopy


 


      2-2) HowTo 문서 중 [ 6장 커널 설치 및 패치 ]의 내용을 탐독하시고, 커널을 컴파일 해야합니다.


 


          모든 컴파일이 정상적으로 되었으면...


  


          현재 문서 내용 중 " /ez/sw/kernel 이란 디렉토리에 설치하는 것을 가정하여 설명한다. "


        


          는 글이 있습니다....


 


          이것을 우리가 Makefile을 만들때 중요한 위치가 된다.....


 


          이 내용은 아래 메이크 파일 만들기에서 설명하기로 한다.


  


          암튼, 커널 컴파일 후 /ez/sw/kernel/linux 의 리스트이다..


 


         [root@jdt linux]# ls -al


         합계 2284


         drwxr-xr-x   14 1046     snort        4096  4월 18 20:15 .


         drwxrwxrwx   17 root     root         4096  4월 18 20:15 ..


         -rw-r--r--    1 root     root        15524  4월 18 20:12 .config       <=== 생성확인


         -rw-r--r--    1 root     root        16222  4월 18 20:11 .config.old


         -rw-r--r--    1 root     root         2531  4월 18 20:12 .depend


         -rw-r--r--    1 root     root       171424  4월 18 20:12 .hdepend


         -rw-r--r--    1 root     root           41  4월 18 20:12 .menuconfig.log


         -rw-r--r--    1 root     root            2  4월 18 20:13 .version


         -rw-r--r--    1 1046     snort       18633  9월  9  2000 COPYING


         -rw-r--r--    1 root     root        77391  4월 18 20:07 CREDITS


         drwxr-xr-x   30 1046     snort        4096  4월 18 20:10 Documentation


         -rw-r--r--    1 root     root        38502  4월 18 20:07 MAINTAINERS


         -rw-r--r--    1 root     root        17341  4월 18 20:10 Makefile


         -rw-r--r--    1 1046     snort       14491  3월 26  2001 README


         -rw-r--r--    1 1046     snort        2815  4월  7  2001 REPORTING-BUGS


         -rw-r--r--    1 root     root         8888  4월 18 20:09 Rules.make


         -rw-r--r--    1 root     root       214686  4월 18 20:15 System.map


         drwxr-xr-x   20 1046     snort        4096  4월 18 20:07 arch


         drwxr-xr-x   41 1046     snort        4096  4월 18 20:12 drivers


         drwxr-xr-x   46 1046     snort        4096  4월 18 20:14 fs


         drwxr-xr-x   28 1046     snort        4096  4월 18 20:13 include


         drwxr-xr-x    2 1046     snort        4096  4월 18 20:13 init


         drwxr-xr-x    2 1046     snort        4096  4월 18 20:15 ipc


         drwxr-xr-x    2 1046     snort        4096  4월 18 20:13 kernel


         drwxr-xr-x    2 1046     snort        4096  4월 18 20:15 lib


         drwxr-xr-x    2 1046     snort        4096  4월 18 20:14 mm


         drwxr-xr-x   27 1046     snort        4096  4월 18 20:15 net


         drwxr-xr-x    5 1046     snort        4096  4월 18 20:13 scripts


         -rwxr-xr-x    1 root     root      1670348  4월 18 20:15 vmlinux


 


   2. gpio 디바이스 드라이버를 위한 디렉토리를 만든다.


 


        [root@jdt /]# cd /


        [root@jdt /]# mkdir tgpio


        [root@jdt /]# cd tgpio


        [root@jdt /tgpio]#


 


        작업할 위치이다...


 


   3. EZBoard용 메이크파일을 만든다...   [ ARM용 Makefile ]


 


        [root@jdt /tgpio]# vi Makefile


 


         //=======================================


        중략...


 


        KERNELDIR = /ez/sw/kernel/linux


        INCLUDEDIR = $(KERNELDIR)/include -I./


 


        include $(KERNELDIR)/.config


 


       중략...


        //=======================================


 


       KERNELDIR =    <=== 여기에 커널 컴파일을 한 디렉토리를 적어 주면 된다.....


       INCLUDEDIR =   <=== 컴파일시 참조할 헤더파일 디렉토리


       즉, 헤더파일의 위치는 [ /ez/sw/kernel/linux/include ]이다.


       include $(KERNELDIR)/.config   <=== 커널 컴파일을 해야만 생기는 .config 파일이다.


 


   4. gpio 디바이스 드라이버를 만든다... [ gpio.c         ]


 


       [root@jdt /tgpio]# vi gpio.c


 


   5. gpio 테스트 프로그램을 만든다...   [ test.c         ]


 


       [root@jdt /tgpio]# vi test.c


 


   6. 컴파일을 한다...


 


       [root@jdt /tgpio]# make clean


       rm -f *.o *~ core .depend


 


       [root@jdt /tgpio]# make dep


       gccmakedep -I/amux/prg/kernel/linux/include -I./ -I/var/data/project/amux/prg/amuxapp/arminclude


 


       [root@jdt /tgpio]# make


       /usr/bin/arm-linux-gcc -Wall -D__KERNEL__ -DMODULE -I/amux/prg/kernel/linux/include -I./


       -I/var/data/project/amux/prg/amuxapp/arminclude   -O2  -c gpio.c


       /usr/bin/arm-linux-gcc -Wall -D__KERNEL__ -DMODULE -I/amux/prg/kernel/linux/include -I./


       -I/var/data/project/amux/prg/amuxapp/arminclude   -O2    -c -o test.o test.c


       /usr/bin/arm-linux-gcc -Wall -D__KERNEL__ -DMODULE -I/amux/prg/kernel/linux/include -I./


       -I/var/data/project/amux/prg/amuxapp/arminclude   -O2  test.o -o test


 


       [root@jdt /tgpio]#


 


   7. 컴파일이 정상적으로 수행 되었다.


 


      위의  2 ~ 6의 작업은 첨부한 파일을 다운 받아서 tgpio.tar.gz 압축 파일을 풀면 된다...


   


      [root@jdt /]# pwd


      /


      [root@jdt /]# ls


      tgpio.tar.gz      <=== 파일이 있는지를 확인한다..


 


      [root@jdt /]# gzip -d ./tgpio.tar.gz


      [root@jdt /]# tar xvf ./tgpio.tar


      [root@jdt /]# ls


      tgpio             <=== 파일이 생성되었는지를 확인한다..


      [root@jdt /]#


      [root@jdt /]# cd tgpio


      [root@jdt /tgpio]# cd tgpio


 


   8. 이제 gpio 디바이스 드라이버와 test 프로그램을 만들었으니, 이지보드에 복사를 해야겠지요...


   


      여기서, NFS파일시스템의 환경을 구축하여 파일을 복사 및 수정을 할 수도 있지만,


   


      저번에 어떤 분이 램디스크를 만들때 에러가 발생한다고 하셨어 이번 기회에 같이 설명을 할까해서...


 


      자, ramdisk 만드는 과정은 다음과 같다.


 


   1) 저희가 제공한 cdrom이나, 자료실에 있는 sw/image/ramdisk.gz 파일을 /tgpio 폴더로 복사를 합니다.


 


      [root@jdt /]# mount /dev/cdrom /mnt/cdrom     <=== 이미 마운트되어 있으면 생략하시면 됩니다...


      [root@jdt /]# cd /mnt/cdrom/sw/image


      [root@jdt image]# pwd


      /mnt/cdrom/sw/image


      [root@jdt image]# ls -al


      합계 2252


      dr-xr-xr-x    1 root     root         2048  2월 26 18:17 .


      dr-xr-xr-x    1 root     root         2048  2월 26 18:17 ..


      -r-xr-xr-x    1 root     root        18264  1월 25 22:01 blob


      -r-xr-xr-x    1 root     root        50880  1월 24 04:22 ezboot


      -r-xr-xr-x    1 root     root        33434  1월 19 11:56 ezflash


      -r-xr-xr-x    1 root     root      1580585  1월 16 22:11 ramdisk.gz


      -r-xr-xr-x    1 root     root       605908  1월 26 00:10 zImage


      [root@jdt image]#


      [root@jdt image]# cp ramdisk.gz /tgpio/


      [root@jdt image]#


      [root@jdt image]# cd /tgpio/


      [root@jdt /tgpio]# ls -al


      drwxr-xr-x    2 root     root         4096  4월 18 16:28 .


      drwxr-xr-x   22 root     root         4096  4월 18 16:00 ..


      -rwxr-xr-x    1 root     root         1087  4월 17 22:01 Makefile


      -rwxr-xr-x    1 root     root         3650  4월 17 17:22 gpio


      -rwxr-xr-x    1 root     root         5962  4월 18 15:39 gpio.c


      -rwxr-xr-x    1 root     root         2776  4월 18 15:40 gpio.o


      -r-xr-xr-x    1 root     root      1580585  4월 18 16:28 ramdisk.gz


      -rwxr-xr-x    1 root     root         6218  4월 18 15:40 test


      -rwxr-xr-x    1 root     root         4047  4월 18 15:31 test.c


      -rwxr-xr-x    1 root     root         2592  4월 18 15:40 test.o


      [root@jdt /tgpio]#


 


   2) 여기서 위의 파일들이 모두 있는지를 확인한다.


 


   3) 이젠 ramdisk를 풀어 마운트할 수 있는 디렉토리를 하나 만들자...


 


      [root@jdt /tgpio]# mkdir ramdisk_disk


 


   4) ramdisk.gz의 압축을 풀고, ramdisk_disk로 마운트하자....[ 이것이 ramdisk의 분해이다.. ]


 


      [root@jdt /tgpio]# gzip -d ramdisk.gz


      [root@jdt /tgpio]# mount -t ext2 -o loop ramdisk ramdisk_disk/


      [root@jdt /tgpio]# cd ramdisk_disk/


      [root@jdt ramdisk_disk]# ls -al


      합계 18


      drwxr-xr-x   14 root     root         1024  1월 16 08:49 .


      drwxr-xr-x    3 root     root         4096  4월 18 16:35 ..


      drwxr-xr-x    2 root     root         1024  1월 25 23:29 bin


      drwxr-xr-x    3 root     root         2048  1월 26 00:28 dev


      drwxr-xr-x    3 root     root         1024  1월 26 00:09 etc


      drwxr-xr-x    3 root     root         1024  1월 16 08:49 home


      drwxr-xr-x    3 root     root         1024  4월  4  2000 lib


      drwxr-xr-x    2 root     root         1024  4월  4  2000 mnt


      drwxr-xr-x    2 root     root         1024  4월  4  2000 proc


      drwxr-x---    2 root     root         1024  1월 16 08:51 root


      drwxr-xr-x    2 root     root         1024  4월  4  2000 sbin


      drwxrwxrwt    2 root     root         1024  4월  4  2000 tmp


      drwxr-xr-x    7 root     root         1024  4월  4  2000 usr


      drwxr-xr-x    7 root     root         1024  4월  4  2000 var


      [root@jdt ramdisk_disk]#


 


   5) 이것이 이지보드에 들어있는 ramdisk이다.


      


       그럼 우리가 작업하려고하는 것을 하도록하자...


      


       뭘해야할까???????//


 


   5-1) 먼저 간단한 파일 복사부터 하도록 하자....


 


       어디에다가 할까??? 고민 중.....


       만만한게 tmp디렉토리니까.....여기에다 gpioEx라는 폴더를 하나 만들자..( 아무거나 상관없다 )


 


       [root@jdt ramdisk_disk]# cd tmp


       [root@jdt tmp]# pwd


        /tgpio/ramdisk_disk/tmp


       [root@jdt tmp]# mkdir gpioEx


       [root@jdt tmp]# ls -al


       합계 3


       drwxrwxrwt    3 root     root         1024  4월 18 16:41 .


       drwxr-xr-x   14 root     root         1024  1월 16 08:49 ..


       drwxr-xr-x    2 root     root         1024  4월 18 16:41 gpioEx


       [root@jdt tmp]# cd gpioEx


       [root@jdt gpioEx]#


       [root@jdt gpioEx]# cp /tgpio/gpio.o /tgpio/ramdisk_disk/tmp/gpioEx/


       [root@jdt gpioEx]# cp /tgpio/test /tgpio/ramdisk_disk/tmp/gpioEx/


       [root@jdt gpioEx]#


 


       <***>  /tgpio/ramdisk_disk/tmp/gpioEx/  <==== 램디스크를 풀어 마운트한 디렉토리이다...


 


 


   5-2) 복사를 모두 하였으면...디바이스 노드를 만들자.


 


       [ 디바이스 노드는 이지보드 부팅 후 만들어 주어도 상관은 없다 ]


 


       다음 위치로 이동


 


       [root@jdt gpioEx]# cd /tgpio/ramdisk_disk/dev


       [root@jdt dev]# pwd


        /tgpio/ramdisk_disk/dev


 


       <**주의> 디바이스 노드는 /dev 디렉토리에 만들어야 하는데...여기서 일반적으로


       [root@jdt gpioEx]# cd /dev  이렇게 하시면 안되는것 아시죠....


       여기는 현재 리눅스의 dev이지 램디스크를 만들기 위한 작업 디렉토리가 아니죠...


       따라서.. 꼭 [root@jdt gpioEx]# cd /tgpio/ramdisk_disk/dev


 


       [root@jgt dev]# mknod GPIO c 254 0


       [root@jgt dev]# ls -al GPIO


       crw-r--r--    1 root     root     254,   0  4월 18 17:01 GPIO


 


       <참고>


 


               gpio.c 소스 내용 중


               =======================================================================


               //메이저 번호 동적 할당


               #define GPIO_MAJOR          254             // 메이저 번호에 254번 할당.


               #define DEVICE_NAME         "GPIO"          // 디바이스 이름.


               =======================================================================


 


        이렇게 정의가 되어 있기 때문에...


 


        디바이스 노드이 이름이 GPIO 가 되며,,,


 


        메이져 번호가 254로 할당되어 254로 사용하였다..


 


        즉, 이것은 모듈의 메이져 번호와 디바이스 노드의 번호가 항상 같아야 한다는 것이다..


 


        그룹지정과 퍼미션에 대한 내용은 아직 잘 몰라서... 사용하지 않았다....


 


        단지, 여기서는 디바이스 노드를 root 권한으로 root가 만들었고, 소유자가 root이다...


 


 


   5-2) 복사와 디바이스 노드를 만들었으니... 이제 다시 램디스크를 압축하자..[ 이것이 램디스크 조립이다..]


 


        [root@jgt dev]# pwd


         /tgpio/ramdisk_disk/dev


        [root@tsHeaven dev]# cd /tgpio


        [root@tsHeaven /tgpio]# ls -al


        drwxr-xr-x    3 root     root         4096  4월 18 17:12 .


        drwxr-xr-x   22 root     root         4096  4월 18 16:00 ..


        -rwxr-xr-x    1 root     root         1087  4월 17 22:01 Makefile


        -rwxr-xr-x    1 root     root         3650  4월 17 17:22 gpio


        -rwxr-xr-x    1 root     root         5962  4월 18 15:39 gpio.c


        -rwxr-xr-x    1 root     root         2776  4월 18 15:40 gpio.o


        -r-xr-xr-x    1 root     root      6291456  4월 18 16:28 ramdisk


        drwxr-xr-x   14 root     root         1024  1월 16 08:49 ramdisk_disk


        -rwxr-xr-x    1 root     root         6218  4월 18 15:40 test


        -rwxr-xr-x    1 root     root         4047  4월 18 15:31 test.c


        -rwxr-xr-x    1 root     root         2592  4월 18 15:40 test.o


        [root@tsHeaven /tgpio]#


 


        여기서.. 마운드를 해제하고, 램디스크를 압축하자...


 


        [root@tsHeaven /tgpio]# umount ./ramdisk_disk/


        [root@tsHeaven /tgpio]# df


        Filesystem           1k-blocks      Used Available Use% Mounted on


        /dev/hda6              6965032   4700448   1910780  72% /


        /dev/hda5             20469984   6802832  13667152  34% /mnt/disk_D


        /dev/hdc                683940    683940         0 100% /mnt/cdrom


        [root@tsHeaven /tgpio]# gzip ramdisk


        [root@tsHeaven /tgpio]# ls -al


        drwxr-xr-x    3 root     root         4096  4월 18 17:24 .


        drwxr-xr-x   22 root     root         4096  4월 18 16:00 ..


        -rwxr-xr-x    1 root     root         1087  4월 17 22:01 Makefile


        -rwxr-xr-x    1 root     root         3650  4월 17 17:22 gpio


        -rwxr-xr-x    1 root     root         5962  4월 18 15:39 gpio.c


        -rwxr-xr-x    1 root     root         2776  4월 18 15:40 gpio.o


        -r-xr-xr-x    1 root     root      1590180  4월 18 16:28 ramdisk.gz


        drwxr-xr-x    2 root     root         4096  4월 18 16:32 ramdisk_disk


        -rwxr-xr-x    1 root     root         6218  4월 18 15:40 test


        -rwxr-xr-x    1 root     root         4047  4월 18 15:31 test.c


        -rwxr-xr-x    1 root     root         2592  4월 18 15:40 test.o


        [root@tsHeaven /tgpio]#


 


   9. 램디스크를 모두 만들었으니..이제...이지보드에 다운로드 해야겠지요...


 


      minicom을 사용하여 다운로드를 하시기 바랍니다....


   


      이것에 대한 설명은 HowTo문서에 자세하게 나와있기 때문에 생략합니다...


 


   10.다운로드가 끝났으면. 이지보드를 부팅하고,,, login 하자...


   


       Welcom to J.D&T EZBOARD.


 


       ezboard login: root


       Password:


       [root@ezboard /root]$ cd /tmp/gpioEx/


       [root@ezboard gpioEx]$ ls -al


       drwxr-xr-x    2 root     root        1024 Apr 18  2002 .


       drwxrwxrwt    3 root     root        1024 Apr 18  2002 ..


       -rwxr-xr-x    1 root     root        2776 Apr 18  2002 gpio.o


       -rwxr-xr-x    1 root     root        6218 Apr 18  2002 test


       [root@ezboard gpioEx]$


 


   11.이제 디바이스 드라이버를 적재하고, test프로그램을 실행시키자....


 


      [root@ezboard gpioEx]$ insmod gpio.o


      Init madule, Succeed. This Device is [GPIO] and Major Number is [254]


      [root@ezboard gpioEx]$


 


      [root@ezboard gpioEx]$ ./test


      SA1100 GPIO D0-D7, D17, D24, red led All OFF.


      EZBOARD GPIO DEVICE OPEN


      GPIO Process Starting


 


      # [1] LED ON


      # [2] LED OFF


      # [3] 0~255


      # [4] Shift>>>>


      # [5] Use Define


      # [q] Quit


   -----------------------------------


     Command ?


 


 


   12.종료 및 디바이스 드라이버를 제거하자


 


      # [1] LED ON


      # [2] LED OFF


      # [3] 0~255


      # [4] Shift>>>>


      # [5] Use Define


      # [q] Quit


   -----------------------------------


     Command ? q


     EZBOARD GPIO DEVICE CLOSE


     GPIO Process Ending


     [root@ezboard gpioEx]$


     [root@ezboard gpioEx]$ rmmod gpio


     SA1100 GPIO D0-D7, D17, D24, Red LED All OFF.


     GPIO Device EXIT SUCESS.


     [root@ezboard gpioEx]$


 


 


 


 





 


   참고


 


     kelp의 유영창님 강좌에서 일부 발췌한 내용입니다.


 


    [ http://kelp.or.kr/korweblog/?page=7&topic=14      StrongARM의 GPIO란? ]


 


    gpio.c 소스 분석시 참고 하세요....


 


 





 


   13. GPIO 레지스터 설명


 


























































레지스터 주소


이름


접근


풀어쓴 영문명


한글 설명


0x 9004 0000


 GPLR


읽기 전용


 GPIO pin-level register  


 핀 상태 검출 레지스터


0x 9004 0004


GPDR


읽기/쓰기


 GPIO pin direction register


 입출력 방향 설정 레지스터


0x 9004 0008


GPSR


쓰기 전용


 GPIO pin output set register


 출력 SeT 레지스터


 0x 9004 000C


GPCR


쓰기 전용


 GPIO pin output clear register


 츨력 Clear 레지스터


0x 9004 0010


GRER


읽기/쓰기


 GPIO rising-edge detect register


 상승 에지 검출 허가 레지스터


0x 9004 0014


GFER


읽기/쓰기


 GPIO falling-edge detect register


 하강 에지 검출 허가 레지스터


0x 9004 0018


GEDR


읽기/쓰기


 GPIO edge detect status register


 에지 검출 레지스터


  0x 9004 0001C


GAFR


읽기/쓰기


 GPIO alternate function register


 부가 기능 사용 허가 레지스터


 


 


   13.1 핀과 비트 관계


 


     각 레지스터의


     비트 0이 GPIO 0번 핀에 해당되고


     비트 27이 GPIO 27번핀에 해당되는 식으로 대응된다.


 


   13.2 GPLR ( GPIO pin-level register ) : 핀 상태 검출 레지스터


 


     이 레지스터는 GPIO의 핀에 인가된 전압 레벨값을 가지게 된다.


     low로 인가되면 GPIO 핀에 해당되는 비트가 0으로 읽히게 되며


     high로 인가되면 GPIO 핀에 해당되는 비트가 1로 읽힌다.


     이 레지스터는 다른 설정 레지스터에 영향을 받지 않는다.


     이 레지스터는 RESET시에 어떤 값이 될지를 알수는 없다.


 


   13.3 GPDR ( GPIO pin direction register ) 입출력 방향 설정 레지스터


 


     이 레지스터는 출력을 허용한다.


     0 이면 입력 전용으로 설정하며


     1 이면 출력이 가능하게 된다.


  


     이 레지스터는 RESET시에는 클리된다.


 


   13.4 GPSR ( GPIO pin output set register ) 출력 Set 레지스터


 


     입출력 방향 설정 레지스터가 출력으로 설정되어 있고


     부가 기능 사용이 허가 되어 있지 않은 상태에서


 


     이 레지스터에 값을 쓰게 되면 GPIO 핀의 상태가


     1 로 설정한 비트에 해당하는 핀을 High 상태로 만든다.


     0 으로 설정한 비트는 이전 상태를 유지한다.


 


   13.5 GPCR ( GPIO pin output clear register ) 출력 Clear 레지스터


 


     입출력 방향 설정 레지스터가 출력으로 설정되어 있고


     부가 기능 사용이 허가 되어 있지 않은 상태에서


 


     이 레지스터에 값을 쓰게 되면 GPIO 핀의 상태가


     1 로 설정한 비트에 해당하는 핀을 Low 상태로 만든다.


     0 으로 설정한 비트는 이전 상태를 유지한다.


 


   13.6 GRER ( GPIO rising-edge detect register ) 상승 에지 검출 허가 레지스터


 


     이 레지스터는 입력 핀의 상태가 Low에서 High로 변했을때 에지 검출 레지스터를


     1 로 설정하는 것을 허가 한다.


  


     이 레지스터는 RESET시에 어떤 값이 될지를 알수는 없다.


 


   13.7 GFER ( GPIO falling-edge detect register ) 하강 에지 검출 허가 레지스터


 


     이 레지스터는 입력 핀의 상태가 High에서 Low로 변했을때 에지 검출 레지스터를


     1 로 설정하는 것을 허가 한다.


 


     이 레지스터는 RESET시에 어떤 값이 될지를 알수는 없다.


 


   13.8 GEDR ( GPIO edge detect status register ) 에지 검출 레지스


 


     이 레지스터는 GRER이나 GFER의 허가 비트가 설정되어 있을 경우


     해당 에지가 발생하면 1 로 설정하여 에지 발생을 표시한다.


 


     이 레지스터는 클리어 데이타를 쓰기전에는 이전 상태를 유지한다.


 


    이 레지스터는 RESET시에 어떤 값이 될지를 알수는 없다.


 


   13.9 GAFR ( GPIO alternate function register ) 부가 기능 사용 허가 레지스터


 


     이 레지스터는 GPIO의 부가적인 기능의 사용을 허가 한다.


     이때는 디지탈 입출력으로는 사용할수 없다.


 


     단 GPIO 0, GPIO 1, GPIO 17, GPIO 24는 해당되지 않는다.


 


     이 레지스터는 RESET시에는 클리된다.


 


 



 





 


    이 강의내용의 소유권은 (주)제이닷디앤티에 있습


'임베디드' 카테고리의 다른 글

[u-boot]u-boot에서 커널로 bootargs 넘겨주기  (0) 2006.10.16
[U-BOOT] short-load-bytes에러시  (0) 2006.10.10
[U-boot] examples에서 컴파일 문제  (0) 2006.09.20
[Arm] LFS를 이용한 ramdisk 구축  (0) 2006.09.15
[Arm] libtermcap 라이브러리 설치  (0) 2006.09.15
Posted by shellbt

[Arm] LFS를 이용한 ramdisk 구축





function forwardTag(blogid, tagname) {
/* 태그별 포스트 정보 보기 페이지 호출 */
document.forwardTag.blogId.value = blogid;
document.forwardTag.tagName.value = tagname;
document.forwardTag.submit();
}




































이 문서는 램디스크를 업그레이드 하는 방법에 대한 글입니다.



개요 #


이 문서는 glibc-2.3.1 공유 라이브러리 기반으로 동작하는 EZ-X5 용 램디스크를 기존 램디스크를 이용하여 업그레이드 하는 과정에 대하여 기술한다.

배경 #


gcc 3.2.1 과 glibc 2.3.1 을 설치했을때에는 기존 프로그램이 기존
램디스크에서 동작하지 않는 문제가 있다. 그러나 기존 램디스크와 동일한 내용을 재 구축하는 것이 그리 쉬운 일은 아니다. 다행
인것은 하위레벨의 arm 버전으로 컴파일 된것은 그대로 수행된다. 단지 새로운 버전의 툴체인으로 컴파일한것은 새로운 라이브러리를
요구한다는 것이다. 그래서 기존 램디스크를 유지한체 필요한 것만 다시 추가하거나 교체 하는 방식을 사용하는 방법을 사용하기로
결정하였다.

LFS 를 구한다. #


새로 업그레이드 할 것들을 패케지를 일일히 돌아 다니면서 구한다는 것은 고역이다. 이를
대신할수 있는 것이 없을까 ? 있다. 바로 LFS 란 프로젝트이다. 이 프로젝트는 리눅스를 새로 구성하는 것에 대하여 기술한
문서이다. 우리는 이 패케지에는 기본적으로 리눅스를 구성하기 위한 패케지들을최신으로 가지고 있다. 여기서 받는다.
ftp://ftp.linuxfromscratch.org/lfs-packages/conglomeration/ 몽땅 받아 놓는다. 이제 이것을 포팅하기 위한 소스 디렉토리를 source 라는 것을 만든다.

작업 디렉토리 가정 #


작업 디렉토리는 다음과 같이 있는 것을 가정한다.
   /project/xscale/ramdisk


기존 이미지를 그대로 옮긴후 푼다. #


다음과 같은 디렉토리를 만든다.
   cd /project/xscale/ramdisk
mkdir base_ramdiskroot
이 디렉토리는 비교하기 위한 기초 디렉토리이다. 이 안에는 기존의 램디스크 화일을 풀어 놓는다.
   mkdir dir_ramdisk
gzip -d ramdisk.gz
mount -t ext2 -o loop ramdisk dir_ramdisk

cd base_ramdiskroot
cp -dpR ../dir_ramdisk/* .

cd ..
umount dir_ramdisk
rm ramdisk


타켓 이미지 화일 작업용 디렉토리를 만든다. #


   cd /project/xscale/ramdisk
mkdir target_ramdiskroot

그리고 base_ramdiskroot 의 내용을 복사해 넣는다.
cd target_ramdiskroot
cp -dpR ../base_ramdiskroot/* .


기본 라이브러리 복사 #


기존의 라이브러리를 제거한다.
  cd /project/xscale/ramdisk/target_ramdiskroot/lib
rm -rf *
cd /project/xscale/ramdisk/target_ramdiskroot/usr/lib
rm -rf *
/usr/arm-linux/lib/에 있는 것을 램디스크의 lib 디렉토리에 집어 넣는다. 스트립을 시키면 복사한다.
  cd /project/xscale/ramdisk/target_ramdiskroot/lib

arm-linux-objcopy --strip-debug /usr/arm-linux/lib/ld-2.3.1.so ld-2.3.1.so
arm-linux-objcopy --strip-debug /usr/arm-linux/lib/libc-2.3.1.so libc-2.3.1.so
arm-linux-objcopy --strip-debug /usr/arm-linux/lib/libcrypt-2.3.1.so libcrypt-2.3.1.so
arm-linux-objcopy --strip-debug /usr/arm-linux/lib/libdl-2.3.1.so libdl-2.3.1.so
arm-linux-objcopy --strip-debug /usr/arm-linux/lib/libm-2.3.1.so libm-2.3.1.so
arm-linux-objcopy --strip-debug /usr/arm-linux/lib/libnsl-2.3.1.so libnsl-2.3.1.so
arm-linux-objcopy --strip-debug /usr/arm-linux/lib/libnss_dns-2.3.1.so libnss_dns-2.3.1.so
arm-linux-objcopy --strip-debug /usr/arm-linux/lib/libnss_files-2.3.1.so libnss_files-2.3.1.so
arm-linux-objcopy --strip-debug /usr/arm-linux/lib/libresolv-2.3.1.so libresolv-2.3.1.so
arm-linux-objcopy --strip-debug /usr/arm-linux/lib/libutil-2.3.1.so libutil-2.3.1.so
arm-linux-objcopy --strip-debug /usr/arm-linux/lib/libgcc_s.so.1 libgcc_s.so.1
퍼미션을 바꾼다.
  chmod 777 *

cd /project/xscale/ramdisk/target_ramdiskroot/usr/lib

arm-linux-objcopy --strip-debug /usr/arm-linux/lib/libpthread-0.10.so libpthread-0.10.so
chmod 777 *
다음 명령을 수행한다.
  ldconfig -r /project/xscale/ramdisk/target_ramdiskroot
gcc 버전을 맞추기 위하여 다음을 수행한다.
   cd /project/xscale/ramdisk/target_ramdiskroot/usr/
mkdir arm-linux
cd arm-linux
ln -s /lib lib


libdb 라이브러리 설치 #

  다음에서 받는다. 

http://http.us.debian.org/debian/pool/main/libd/libdb/libdb_1.85.4.orig.tar.gz

패케지 libdb_1.85.4.orig.tar.gz 를 /project/xscale/ramdisk/source 에 넣고 푼다.

소스를 푼다.

tar zxvf libdb_1.85.4.orig.tar.gz
cd libdb-1.85.4.orig

hash/hash.h 를 수정한다.

가장 위에

#undef errno 를 삽입한다.

hash/extern.h 를 수정한다.

hash/hash.h를 수정한다.

마지막에 다음을 추가 한다.
extern int errno;

cd PORT/linux

Makefile을 편집한다.

prefix = /root/usr 를 prefix = /usr/arm-linux/ 로 바꾼다.

내용중 ar 명령을 arm-linux-ar 로 바꾼다.
내용중 ranlib 명령을 arm-linux-ranlib 로 바꾼다.
내용중 gcc 명령을 arm-linux-gcc 로 바꾼다.

내용중 OORG= -O6 -m486 -fomit-frame-pointer 을
OORG= -O6 -fomit-frame-pointer 로 바꾼다.

컴파일을 한다.

CC=arm-linux-gcc make all

설치를 한다.
make install

이것을 타켓으로 옮긴다.

cd /project/xscale/ramdisk/target_ramdiskroot/lib

복사한다.

cp -dpR /usr/arm-linux/lib/libdb.so .
cp -dpR /usr/arm-linux/lib/libdb.so.1 .

스트립을 시키면 복사한다.

arm-linux-objcopy --strip-debug /usr/arm-linux/lib/libdb.so.1.85.4 libdb.so.1.85.4




libtermcap 라이브러리 설치 #

   다음에 간다. 

http://www.sony.net/Products/Linux/Download/FSV-PGX1.html

다음 화일을 받는다.


http://www.sony.net/Products/Linux/Download/FSV-PGX1/libtermcap-2.0.8-31.src.rpm

패케지 termcap-1.3.1.tar.gz 를 /project/xscale/ramdisk/source 에 넣고 푼다.

rpm2cpio libtermcap-2.0.8-31.src.rpm | cpio -ivd

기본 소스를 푼다.

bunzip2 termcap-2.0.8.tar.bz2

tar xvf termcap-2.0.8.tar
cd termcap-2.0.8

패치를 가한다.

cat ../termcap-2.0.8-shared.patch | patch -p1
cat ../termcap-2.0.8-setuid.patch | patch -p1
cat ../termcap-2.0.8-instnoroot.patch | patch -p1
cat ../termcap-2.0.8-compat21.patch | patch -p1
cat ../termcap-2.0.8-xref.patch | patch -p1
cat ../termcap-2.0.8-fix-tc.patch | patch -p1
cat ../termcap-2.0.8-ignore-p.patch | patch -p1
cat ../termcap-buffer.patch | patch -p1
cat ../termcap-2.0.8-bufsize.patch | patch -p1
cat ../termcap-2.0.8-colon.patch | patch -p1
cat ../libtermcap-aaargh.patch | patch -p1
cat ../termcap-2.0.8-glibc22.patch | patch -p1
cat ../libtermcap-2.0.8-ia64.patch | patch -p1

Makefile의 컴파일러 명령을 수정한다.

CC=gcc 를 CC=arm-linux-gcc
AR=ar 를 AR=arm-linux-ar

prefix=/ 를 prefix=/usr/arm-linux/

로 바꾼다.

컴파일을 수행한다.
make

설치를 일일히 손으로 한다.

cp libtermcap.so.2.0.8 /usr/arm-linux/lib/
cp -f libtermcap.a /usr/arm-linux/lib
cp -f termcap.h /usr/arm-linux/include
cp termcap.info* /usr/arm-linux/info

이것을 타켓으로 옮긴다.

cd /project/xscale/ramdisk/target_ramdiskroot/lib

스트립을 시키면 복사한다.

arm-linux-objcopy --strip-debug /usr/arm-linux/lib/libtermcap.so.2.0.8 libtermcap.so.2.0.8




ncurses 라이브러리 설치 #

   libtermcap 공유 라이브러리는 ncurses 패케지에 있다. 

패케지 ncurses-5.3.tar.bz2 를 /project/xscale/ramdisk/source 에 넣고 푼다.
cd /project/xscale/ramdisk/source
bunzip2 ncurses-5.3.tar.bz2
tar xvf ncurses-5.3.tar
cd ncurses-5.3

환경 설정을 한다.

LD=arm-linux-ld AR=arm-linux-ar RANLIB=arm-linux-ranlib CC=arm-linux-gcc CXX=arm-linux-g++
./configure --host=i686-linux --target=arm-linux --prefix=/usr/arm-linux --with-shared


설정된 내용에서 다음을 바꾼다.

misc/Makefile 에서
HOSTCC = $(CC) 를 HOSTCC = gcc 로 바꾼다.

sh ./run_tic.sh 을 발견하면 주석 처리 한다.
# sh ./run_tic.sh


ncurses/Makefile 에서
HOSTCC = $(CC) 를 HOSTCC = gcc 로 바꾼다.

컴파일을 수행한다.

make

에러가 나지 않았다면 설치를 수행한다.

make install


라이브러리를 타켓으로 옮긴다.
cd /project/xscale/ramdisk/target_ramdiskroot/usr/lib

스트립을 시키면 복사한다.

arm-linux-objcopy --strip-debug /usr/arm-linux/lib/libncurses.so.5.3 libncurses.so.5.3



libproc.so 라이브러리 설치 #

   libproc 라이브러리는 procps-3.0.4 패케지에 포함되어 있다. 

패케지 procps-3.0.4.tar.bz2 를 /project/xscale/ramdisk/source 에 넣고 푼다.
bunzip2 procps-3.0.4.tar.bz2
tar xvf procps-3.0.4.tar
cd procps-3.0.4

top.c 의 참조 헤더화일에 대하여 수정한다.
vi top.c

#include 를 #include
#include 를 #include

로 수정한다.

watch.c 의 참조 헤더화일에 대하여 수정한다.
#include 를 #include

컴파일을 수행한다.
DESTDIR=/usr/arm-linux LD=arm-linux-ld AR=arm-linux-ar RANLIB=arm-linux-ranlib CC=arm-linux-gcc make


생성된 libproc.so.3.0.4 화일을 /usr/arm-linux/lib에 복사한다.

cp proc/libproc.so.3.0.4 /usr/arm-linux/lib/
cp -dpR proc/libproc.so /usr/arm-linux/lib/

이것을 타켓으로 옮긴다.

cd /project/xscale/ramdisk/target_ramdiskroot/lib

cp -dpR /usr/arm-linux/lib/libproc.so .
스트립을 시키면 복사한다.
arm-linux-objcopy --strip-debug /usr/arm-linux/lib/libproc.so.3.0.4 libproc.so.3.0.4




libz 라이브러리 설치 #

   libz 라이브러리는 zlib-1.1.4.tar.bz2 패케지에 포함되어 있다. 

패케지 zlib-1.1.4.tar.bz2 를 /project/xscale/ramdisk/source 에 넣고 푼다.
bunzip2 zlib-1.1.4.tar.bz2
tar xvf zlib-1.1.4.tar
cd zlib-1.1.4

LD=arm-linux-ld AR=arm-linux-ar RANLIB=arm-linux-ranlib CC=arm-linux-gcc CPP=arm-linux-g++
./configure --prefix=/usr/arm-linux --shared

Makefile의 내용중 다음을 고친다.
LDSHARED=arm-linux-gcc 를 LDSHARED=arm-linux-gcc -shared 로 수정

AR=arm-linux-ar 를 AR=arm-linux-ar rc 로 수정

install: $(LIBS) $(SHAREDLIB).$(VER) 를 install: $(LIBS) $(SHAREDLIB).$(VER) 로 수정

그뒤에

cp $(LIBS) $(libdir) 를 발견하면 그뒤에
cp $(SHAREDLIB).$(VER) $(libdir) 를 추가

cd $(libdir); chmod 755 $(LIBS) 를 발견하면 그뒤에
cd $(libdir); chmod 755 $(SHAREDLIB).$(VER) 를 추가

컴파일과 설치한다.

make install

라이브러리를 타켓으로 옮긴다.

cd /project/xscale/ramdisk/target_ramdiskroot/usr/lib

cp -dpR /usr/arm-linux/lib/libz.so .
cp -dpR /usr/arm-linux/lib/libz.so.1 .

스트립을 시키면 복사한다.
arm-linux-objcopy --strip-debug /usr/arm-linux/lib/libz.so.1.1.4 libz.so.1.1.4




sysvinit 를 컴파일 하여 넣는다. #

   패케지 sysvinit-2.84.tar.gz 를 /project/xscale/ramdisk/source 에 넣고 푼다. 

tar zxvf sysvinit-2.84.tar.gz

소스 디렉토리로 이동한다.

cd sysvinit-2.84/src

Makefile을 수정한다.

CC = gcc 를
CC = arm-linux-gcc 로 수정

make

기존의 화일을 지운다.

cd /project/xscale/ramdisk/target_ramdiskroot

rm -rf sbin/halt
rm -rf usr/bin/last
rm -rf sbin/sulogin
rm -rf sbin/runlevel
rm -rf sbin/shutdown
rm -rf sbin/init

새로 만들어진 화일을 복사해 넣는다.

arm-linux-objcopy --strip-all /project/xscale/ramdisk/source/sysvinit-2.84/src/halt sbin/halt
arm-linux-objcopy --strip-all /project/xscale/ramdisk/source/sysvinit-2.84/src/last usr/bin/last
arm-linux-objcopy --strip-all /project/xscale/ramdisk/source/sysvinit-2.84/src/sulogin sbin/sulogin
arm-linux-objcopy --strip-all /project/xscale/ramdisk/source/sysvinit-2.84/src/runlevel sbin/runlevel
arm-linux-objcopy --strip-all /project/xscale/ramdisk/source/sysvinit-2.84/src/shutdown sbin/shutdown
arm-linux-objcopy --strip-all /project/xscale/ramdisk/source/sysvinit-2.84/src/init sbin/init

etc/ld.so.conf 에 라이브러리가 존재하는 디렉토리들을 써 준다.

====[etc/ld.so.conf]===========================================
/lib
/usr/lib
===============================================================



busybox 를 컴파일 하여 넣는다. #

   우선 busybox 소스 패케지를 가져 온다. 

홈페이지는 여기다.

http://www.busybox.net/

다음 화일을 가져온다.

http://www.busybox.net/downloads/busybox-0.60.4.tar.gz

/project/xscale/ramdisk/source 에 넣고 푼다.

tar zxvf busybox-0.60.4.tar.gz
cd busybox-0.60.4

Config.h 화일의 주석 마크 된것은 구현되어 있으나
포함시키지 않는다는 것이다.

다음은 제거한다.

#define BB_KILL
#define BB_HALT

다음은 추가로 포함 시킨 내용들이다.

#define BB_DEALLOCVT
#define BB_FBSET
#define BB_FREERAMDISK
#define BB_HOSTNAME
#define BB_IFCONFIG ( 이 부분은 원래 busybox로 구현된 것이 아니다. )
#define BB_INSMOD ( 이 부분은 원래 busybox로 구현된 것이 아니다. )
#define BB_LOGNAME
#define BB_NSLOOKUP
#define BB_PING
#define BB_PRINTF
#define BB_RDATE ( 이 부분은 원래 busybox로 구현된 것이 아니다. )
#define BB_RMMOD ( 이 부분은 원래 busybox로 구현된 것이 아니다. )
#define BB_RPM2CPIO ( 이 부분은 원래 없으나 추가 하였다 )
#define BB_STTY ( 이 부분은 원래 busybox로 구현된 것이 아니다. )
#define BB_TEE
#define BB_TELNET ( 이 부분은 원래 busybox로 구현된 것이 아니다. )
#define BB_TFTP ( 이 부분은 원래 없으나 추가 하였다 )
#define BB_TOP ( 이 부분은 원래 busybox로 구현된 것이 아니다. )
#define BB_TR
#define BB_TRACEROUTE ( 이 부분은 원래 busybox로 구현된 것이 아니다. )
#define BB_UPDATE
#define BB_USLEEP
#define BB_VI ( 이 부분은 원래 busybox로 구현된 것이 아니다. )

다음은 필요하다고 생각해서 추가한 부분이다.

#define BB_WGET
#define BB_TIME
#define BB_LOSETUP



#define BB_FEATURE_USE_TERMIOS
#define BB_FEATURE_INIT_COREDUMPS
#define BB_FEATURE_IPC_SYSLOG

#define BB_FEATURE_IFCONFIG_STATUS
#define BB_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ
#define BB_FEATURE_IFCONFIG_HW
#define BB_FEATURE_IFCONFIG_BROADCAST_PLUS

#define BB_FEATURE_GREP_CONTEXT
#define BB_FEATURE_GREP_EGREP_ALIAS
#define BB_FEATURE_INSMOD_VERSION_CHECKING
#define BB_FEATURE_FBSET_READMODE
#define BB_FEATURE_FBSET_FANCY
#define BB_FEATURE_SH_FANCY_PROMPT
#define BB_FEATURE_SH_APPLETS_ALWAYS_WIN
#define BB_FEATURE_SH_STANDALONE_SHEL
#define BB_FEATURE_COMMAND_USERNAME_COMPLETION
#define BB_FEATURE_NFSMOUNT


Makefile 을 수정한다.

CROSS = 를

CROSS = arm-linux- 로 수정한다

make 를 수행한다.

기존에 있던 내용을 지운다.

cd /project/xscale/ramdisk/target_ramdiskroot

rm -rf bin/busybox

rm -rf bin/ash
rm -rf bin/cat
rm -rf bin/chgrp
rm -rf bin/chmod
rm -rf bin/chown
rm -rf bin/cp
rm -rf bin/date
rm -rf bin/dd
rm -rf bin/df
rm -rf bin/dmesg
rm -rf bin/echo
rm -rf bin/egrep
rm -rf bin/false
rm -rf bin/grep
rm -rf bin/gunzip
rm -rf bin/gzip
rm -rf bin/hostname
rm -rf bin/kill
rm -rf bin/ln
rm -rf bin/ls
rm -rf bin/mkdir
rm -rf bin/mknod
rm -rf bin/more
rm -rf bin/mount
rm -rf bin/mv
rm -rf bin/pidof
rm -rf bin/ping
rm -rf bin/ps
rm -rf bin/pwd
rm -rf bin/rm
rm -rf bin/rmdir
rm -rf bin/sed
rm -rf bin/sh
rm -rf bin/sleep
rm -rf bin/stty
rm -rf bin/sync
rm -rf bin/tar
rm -rf bin/touch
rm -rf bin/true
rm -rf bin/umount
rm -rf bin/uname
rm -rf bin/usleep
rm -rf bin/vi
rm -rf bin/zcat

rm -rf sbin/freeramdisk
rm -rf sbin/ifconfig
rm -rf sbin/insmod
rm -rf sbin/klogd
rm -rf sbin/logread
rm -rf sbin/lsmod
rm -rf sbin/mkswap
rm -rf sbin/modprobe
rm -rf sbin/poweroff
rm -rf sbin/reboot
rm -rf sbin/rmmod
rm -rf sbin/swapoff
rm -rf sbin/swapon
rm -rf sbin/syslogd
rm -rf sbin/update

rm -rf usr/bin/[
rm -rf usr/bin/basename
rm -rf usr/bin/chvt
rm -rf usr/bin/clear
rm -rf usr/bin/cut
rm -rf usr/bin/deallocvt
rm -rf usr/bin/dirname
rm -rf usr/bin/du
rm -rf usr/bin/env
rm -rf usr/bin/find
rm -rf usr/bin/free
rm -rf usr/bin/head
rm -rf usr/bin/id
rm -rf usr/bin/killall
rm -rf usr/bin/logger
rm -rf usr/bin/logname
rm -rf usr/bin/nslookup
rm -rf usr/bin/printf
rm -rf usr/bin/rdate
rm -rf usr/bin/reset
rm -rf usr/bin/rpm2cpio
rm -rf usr/bin/sort
rm -rf usr/bin/tail
rm -rf usr/bin/tee
rm -rf usr/bin/telnet
rm -rf usr/bin/test
rm -rf usr/bin/tftp
rm -rf usr/bin/top
rm -rf usr/bin/tr
rm -rf usr/bin/traceroute
rm -rf usr/bin/tty
rm -rf usr/bin/uniq
rm -rf usr/bin/uptime
rm -rf usr/bin/wc
rm -rf usr/bin/which
rm -rf usr/bin/whoami
rm -rf usr/bin/xargs
rm -rf usr/bin/yes

rm -rf usr/sbin/chroot
rm -rf usr/sbin/fbset

원본 busybox 를 복사한다.

arm-linux-objcopy --strip-all /project/xscale/ramdisk/source/busybox-0.60.4/busybox bin/busybox

cd /project/xscale/ramdisk/target_ramdiskroot/bin

ln -s /bin/busybox ash
ln -s /bin/busybox cat
ln -s /bin/busybox chgrp
ln -s /bin/busybox chmod
ln -s /bin/busybox chown
ln -s /bin/busybox cp
ln -s /bin/busybox date
ln -s /bin/busybox dd
ln -s /bin/busybox df
ln -s /bin/busybox dmesg
ln -s /bin/busybox echo
ln -s /bin/busybox egrep
ln -s /bin/busybox false
ln -s /bin/busybox grep
ln -s /bin/busybox gunzip
ln -s /bin/busybox gzip
ln -s /bin/busybox hostname
ln -s /bin/busybox kill
ln -s /bin/busybox ln
ln -s /bin/busybox ls
ln -s /bin/busybox mkdir
ln -s /bin/busybox mknod
ln -s /bin/busybox more
ln -s /bin/busybox mount
ln -s /bin/busybox mv
ln -s /bin/busybox pidof
ln -s /bin/busybox ping
ln -s /bin/busybox ps
ln -s /bin/busybox pwd
ln -s /bin/busybox rm
ln -s /bin/busybox rmdir
ln -s /bin/busybox sed
ln -s /bin/busybox sh
ln -s /bin/busybox sleep
ln -s /bin/busybox stty
ln -s /bin/busybox sync
ln -s /bin/busybox tar
ln -s /bin/busybox touch
ln -s /bin/busybox true
ln -s /bin/busybox umount
ln -s /bin/busybox uname
ln -s /bin/busybox usleep
ln -s /bin/busybox vi
ln -s /bin/busybox zcat

cd /project/xscale/ramdisk/target_ramdiskroot/sbin

ln -s /bin/busybox freeramdisk
ln -s /bin/busybox ifconfig
ln -s /bin/busybox insmod
ln -s /bin/busybox klogd
ln -s /bin/busybox logread
ln -s /bin/busybox lsmod
ln -s /bin/busybox mkswap
ln -s /bin/busybox modprobe
ln -s /bin/busybox poweroff
ln -s /bin/busybox reboot
ln -s /bin/busybox rmmod
ln -s /bin/busybox swapoff
ln -s /bin/busybox swapon
ln -s /bin/busybox syslogd
ln -s /bin/busybox update
ln -s /bin/busybox losetup


cd /project/xscale/ramdisk/target_ramdiskroot/usr/bin

ln -s /bin/busybox [
ln -s /bin/busybox basename
ln -s /bin/busybox chvt
ln -s /bin/busybox clear
ln -s /bin/busybox cut
ln -s /bin/busybox deallocvt
ln -s /bin/busybox dirname
ln -s /bin/busybox du
ln -s /bin/busybox env
ln -s /bin/busybox find
ln -s /bin/busybox free
ln -s /bin/busybox head
ln -s /bin/busybox id
ln -s /bin/busybox killall
ln -s /bin/busybox logger
ln -s /bin/busybox logname
ln -s /bin/busybox nslookup
ln -s /bin/busybox printf
ln -s /bin/busybox rdate
ln -s /bin/busybox reset
ln -s /bin/busybox rpm2cpio
ln -s /bin/busybox sort
ln -s /bin/busybox tail
ln -s /bin/busybox tee
ln -s /bin/busybox telnet
ln -s /bin/busybox test
ln -s /bin/busybox tftp
ln -s /bin/busybox top
ln -s /bin/busybox tr
ln -s /bin/busybox traceroute
ln -s /bin/busybox tty
ln -s /bin/busybox uniq
ln -s /bin/busybox uptime
ln -s /bin/busybox wc
ln -s /bin/busybox which
ln -s /bin/busybox whoami
ln -s /bin/busybox xargs
ln -s /bin/busybox yes
ln -s /bin/busybox wget
ln -s /bin/busybox time


cd /project/xscale/ramdisk/target_ramdiskroot/usr/sbin

ln -s /bin/busybox chroot
ln -s /bin/busybox fbset




시리얼 콘솔이 동작할수 있게 수정한다 #

   장치화일을 등록한다. 

cd /project/xscale/ramdisk/target_ramdiskroot/dev
mknod ttyS00 c 4 64
mknod ttyS01 c 4 65
mknod ttyS02 c 4 66


etc/inittab 에 login을 수정한다.
cd /project/xscale/ramdisk/target_ramdiskroot/etc
vi inittab

T0:12345:respawn:/sbin/getty -L ttySA0 115200 vt100 을
T0:12345:respawn:/sbin/getty -L ttyS02 115200 vt100 로 바꾼다.

etc/securetty 의 내용을 수정한다.
vi securetty

ttySA0 을 ttyS02 로 바꾼다.




이전의 램디크의 자잘한 잘못을 수정한다. #

   root 에 있는 ez_ip를 제거한다
.
etc/rc.d/rc.local 의 내용중

-------------------------------------------------------------
ifconfig lo up
if [ -f /root/ez_ip ]; then
/root/ez_ip
else
ifconfig eth0 192.168.10.125 netmask 255.255.255.0 up
fi
-------------------------------------------------------------



-------------------------------------------------------------
ifconfig lo 127.0.0.1 up
ifconfig eth0 192.168.10.125 netmask 255.255.255.0 up
-------------------------------------------------------------
로 바꾼다.


mnt 디렉토리 밑데 nfs, temp 란 디렉토리를 만든다.
cd mnt
mkdir nfs
mkdir temp

chmod 777 *

etc/rc.d/rc.sysinit 의 내용중

# Set the path
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH

mount -n -o remount,rw /

을 가장 선두에 올린다.

etc/fstab 의 내용을

-------------------------------------------------------------
/dev/ram0 / ext2 defaults 1 1
none /proc proc defaults 0 0
none /dev/pts devpts gid=5,mode=620 0 0
-------------------------------------------------------------

로 바꾼다.




램디스크로 만든다. #

   dd if=/dev/zero of=t_ramdisk bs=1k count=10240
/sbin/losetup /dev/loop1 t_ramdisk
/sbin/mke2fs /dev/loop1
/sbin/losetup -d /dev/loop1
mount -t ext2 -o loop t_ramdisk dir_ramdisk
ldconfig -r /project/xscale/ramdisk/target_ramdiskroot
cp -dpR target_ramdiskroot/* dir_ramdisk
umount dir_ramdisk
gzip t_ramdisk
mv t_ramdisk.gz ramdisk.new.gz
cp ramdisk.new.gz /tftpboot/ramdisk.new.gz

타켓 보드에 넣고 테스트 해본다.









Posted by shellbt

[Arm] libtermcap 라이브러리 설치

libtermcap 라이브러리 설치 #

   다음에 간다. 

http://www.sony.net/Products/Linux/Download/FSV-PGX1.html

다음 화일을 받는다.


http://www.sony.net/Products/Linux/Download/FSV-PGX1/libtermcap-2.0.8-31.src.rpm

패케지 termcap-1.3.1.tar.gz 를 /project/xscale/ramdisk/source 에 넣고 푼다.

rpm2cpio libtermcap-2.0.8-31.src.rpm | cpio -ivd

기본 소스를 푼다.

bunzip2 termcap-2.0.8.tar.bz2

tar xvf termcap-2.0.8.tar
cd termcap-2.0.8

패치를 가한다.

cat ../termcap-2.0.8-shared.patch | patch -p1
cat ../termcap-2.0.8-setuid.patch | patch -p1
cat ../termcap-2.0.8-instnoroot.patch | patch -p1
cat ../termcap-2.0.8-compat21.patch | patch -p1
cat ../termcap-2.0.8-xref.patch | patch -p1
cat ../termcap-2.0.8-fix-tc.patch | patch -p1
cat ../termcap-2.0.8-ignore-p.patch | patch -p1
cat ../termcap-buffer.patch | patch -p1
cat ../termcap-2.0.8-bufsize.patch | patch -p1
cat ../termcap-2.0.8-colon.patch | patch -p1
cat ../libtermcap-aaargh.patch | patch -p1
cat ../termcap-2.0.8-glibc22.patch | patch -p1
cat ../libtermcap-2.0.8-ia64.patch | patch -p1

Makefile의 컴파일러 명령을 수정한다.

CC=gcc 를 CC=arm-linux-gcc
AR=ar 를 AR=arm-linux-ar

prefix=/ 를 prefix=/usr/arm-linux/

로 바꾼다.

컴파일을 수행한다.
make

설치를 일일히 손으로 한다.

cp libtermcap.so.2.0.8 /usr/arm-linux/lib/
cp -f libtermcap.a /usr/arm-linux/lib
cp -f termcap.h /usr/arm-linux/include
cp termcap.info* /usr/arm-linux/info

이것을 타켓으로 옮긴다.

cd /project/xscale/ramdisk/target_ramdiskroot/lib

스트립을 시키면 복사한다.

arm-linux-objcopy --strip-debug /usr/arm-linux/lib/libtermcap.so.2.0.8 libtermcap.so.2.0.8



'임베디드' 카테고리의 다른 글

[u-boot]u-boot에서 커널로 bootargs 넘겨주기  (0) 2006.10.16
[U-BOOT] short-load-bytes에러시  (0) 2006.10.10
[U-boot] examples에서 컴파일 문제  (0) 2006.09.20
[Arm] GPIO 제어 디바이스 드라이버  (0) 2006.09.15
[Arm] LFS를 이용한 ramdisk 구축  (0) 2006.09.15
Posted by shellbt
prev 1 ··· 8 9 10 11 12 next

openclose