LED GPIO 드라이버 추가하기

Posted in 단체/ㄴKETI 연수생 by

### Flow Chart ###

ㅁㅁㅁ        하드웨어        ㅁㅁㅁ

ㅁㅁㅁ        커널              ㅁㅁㅁ

   - kernel/arch/arm/mach-s5pv210/mach-mango210.c : platform_data 및 platfom_device 생성

   - kernel/drivers/char/IR/ir-nec-encoder.c : driver를 통해 .name이 같은 device를 찾아 data 구조체를 갖고와서 컨트롤 

ㅁㅁㅁ        System call    ㅁㅁㅁ

   - System call을 이용하여 ir-nec-encoder에 정의되어 있는 함수를 호출

ㅁㅁㅁ        Application     ㅁㅁㅁ

   - App에서 System call을 호출하여 커널 디바이스 드라이버를 컨트롤


### 01. Platform data 및 device 생성하기 ###

1. 아래에서 생성할 Platform data 구조체를  : include/linux/myled.h

    → 2번에서 생성할 data 구조체를 정의해놓는다. (참고 : include/linux/smr210_ir_nec_encoder.h)

2. Data 및 Device 생성 : /kernel/arch/arm/mach-s5pv210/mach-mango210.c

    → mango210.c에서 CONFIG_SMR210_IR_NEC_ENCODER 심벌로 정의되어 있는 부분 참고(2부분)

    → 1부분 : Data 구조체와 Device 구조체 생성 // 2부분 *mango210_device[] __initdata에 생성한 Device 추가

    → 새로 정의하는 심벌이름은 CONFIG_MY_GPIO_LED로 하겠다

    → LED 주소값 설정 : (data구조체 변수).gpio_tx = S5PV210_GPH2(0)


### 02. LED 드라이버 추가 ###

1. 위에서 정의한 data와 device를 컨트롤할 드라이버 구현

    → drivers/leds/폴더명 (참조 : drivers/char/IR/Makefile, Kconfig, ir-nec-encoder.c 3파일 Modify)

    → ir-nec-encoder.c 파일이름을 변경 : mv ir-nec-encoder.c myled.c

    → Makefile 수정 : 심볼이름을 위에서 정의한 심볼(CONFIG_MY_GPIO_LED)로 바꾸고 오브젝트 파일을 myled.o로 바꾼다

    → KConfig 수정 : 기존 내용을 다 지우고 아래 내용을 추가해준다 (menuconfig가 CONFIG_라는 이름을 자동으로 붙여줌)

config MY_GPIO_LED

bool "GPH2[0] LED ADD SYMBOL"


2. 드라이버 기능을 myled.c 파일에 선언과 정의

     → 01번에서 정의한 Platform data 구조체를 사용해야 하니 #include <linux/myled.h>를 해준다

     → static struct platform_driver myled_device_driver을 정의해주고 구조체변수들을 입력

     → driver의 구조체변수 .probe, .remove 함수포인터 전달 & .driver = {.name="myled"}은 mach-mango210.c에서 

         "myled"와 같은 드라이버를 찾아서 그 디바이스 주소값을 넘겨준다.(이를 통해 접근하면서 디바이스를 컨트롤)

     → static int __init myled_init() 정의와 안에 platform_driver_register(&myled_device_driver)를 통해 드라이버 등록

     → static void __exit myled_exit() 정의와 안에 platform_driver_unregister(&myled_device_driver)를 통해 드라이버 해제

     → module_init(myled_init) 선언 - insmod로 불려지는 함수, module_exit(myled_exit) 선언 - rmmod로 불려지는 함수 


### 03. Makefile, Kconfig 의존성 해결(Menuconfig 추가하기) ###

1. Makefile 의존성 해결

    → myled의 Makefile이 실행되기 위해 상위 Makefile을 수정해줘야 한다

    → leds/Makefile에 obj-$(CONFIG_MY_GPIO_LED)    += myled/ 를 추가시켜준다

2. Kconfig 의존성 해결

    → make menuconfig 에서 CONFIG_MY_GPIO_LED을 체크하려는 창을 만들려면 myled의 Kconfig를 수정해야한다.

    → if NEW_LEDS 아래에 source "drivers/leds/myled/Kconfig"를 추가해준다

    → 그러면 make menuconfig에서 drivers-LED를 체크해주면 NEW_LEDS가 정의되어 있으니 Source 파일이 활성화되면서 

  우리가 추가해준 myled의 Kconfig가 보인다

    → MY_GPIO_LED 심볼을 활성화하여 CONFIG_MY_GPIO_LED 심볼이 활성화되도록 한다

    → kernel/.config 와 kernel/include/linux/autoconf.h 에서 CONFIG_MY_GPIO_LED 심볼이 추가됐는지 확인


### 04. System Call 추가하기 ###

1. System Call 번호 할당 : $ /kernel/arch/arm/include/asm/unistd.h (각 시스템 호출의 고유 번호가 정의되어 있음)

    → 새로 추가할 System call의 고유번호 정의 추가 : #define __NR_my_gpio_led                                [__NR_심볼명]

2. System Call 테이블에 처리 함수 등록 : $ /kernel/arch/arm/kernel/calls.S

    → System Call 처리함수 등록 : CALL(sys_my_gpio_led)                                                      [CALL(sys_심볼명)]

    → entry-common.S파일에서 ENTRY(sys_call_table)이 calls.S를 include하고 있기 때문에 calls.S를 수정하는 것

3. 처리 함수 구현 : /kernel/kernel/my_gpio_led.c                                                                                 [파일명.c]

    → System Call 이 발생했을 때 수행될 함수를 구현

    → asmlinkage 반환자료형 sys_my_gpio_led(...) { 내용 } : 2번에서 CALL로 등록한 이름과 동일해야 함 [sys_심볼명]

4. Makefile 수정 : /kernel/kernel/Makefile 에 3번에서 구현한 '파일명.c'의 오브젝트 파일을 생성할 수 있도록 조건 추가

    → obj-y    = ***.o ***.o my_gpio_led.o                                                                                           [파일명.o]

5. Kernel 컴파일 수행 및 커널 이미지 복사 : ./fastbuild ( make && cp zImage ../../sdboot/zImage )

6. Kernel 이미지 퓨징 : sudo ./sdwriter_maple210 sdb


### 05. Android App 추가하기 : System call Test ###

1. Application 작성 : Android_work/external/디렉토리

    → external에 새로운 작업 디렉토리를 만든다

    → 작업디렉토리에 소스파일(my_gpio_led.c)를 만들고 System call를 호출한다(syscall(__NR_my_gpio_led))

2. 안드로이드 어플 Makefile 작성 : Android_work/external/디렉토리/Android.mk

    → 파일명.c은 위에서 작성한 소스파일명과 동일, 모듈이름은 안드로이드 프롬프트에서 실행할 명령어

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_C_INCLUDES:= \

$(LOCAL_PATH)/include \

$(LOCAL_PATH)/android

LOCAL_SRC_FILES:= \

my_gpio_led.c                                                                                                          [파일명.c]

LOCAL_MODULE:= my_gpio_led                                                                                     [실행 명령어]

include $(BUILD_EXECUTABLE)

3. 컴파일 및 설치 : Android_work/

    → 컴파일 한 후 실행파일을 rootfs/system/bin에 복사

$ . build/envsetup.sh

$ chooseproduct sec_smdkv210

$ mmm external/디렉토리/

$ cp out/target/product/smdkv210/system/bin/my_gpio_led rootfs/system/bin

4. rootfs 를 묶어서 sdboot로 이동 : Android_work/rootfs/

    → rootfs 폴더에서 $ tar cvfz ../../sdboot/maple210_android210.tgz .

    → Kernel 이미지와 안드로이드 이미지 퓨징 $ sudo ./sdwrite_maple210 sdb

5. 테스트

    → sh-4.0 # 모듈명

스택 후위연산(Postfix) 계산기

Posted in 카테고리 없음 by

 


알고리즘 과제로 만든 스택(Stack)을 사용한 후위연산 계산기입니다.

현재의 스택구조를 표현하기 위해 MFC를 아직 안배워서 자바로 구성해봤어요

이틀정도 걸렸는데 콘솔프로그램만 만들다가 

처음으로 GUI프로그램을 만들어보니 쫌 뿌듯하네요 :D


아직 부족한 점이 많지만 올려봅니다. 몇개의 수식을 테스트해봤는데 별이상없네요.

고쳐야할 점이나, 연산이 이상하게 되는 수식있으시면 말씀해주세요~

(실행하려면 JRE가 설치 되어있어야 합니다)



=== Postfix 계산기 ===




=== JRE 6.12 windows ===


Shayne Ward - Breathless

Posted in 카테고리 없음 by


Shayne Ward - Breathless (Cowon S9 CF 삽입곡)

If our love was a fairy tale
우리의 사랑이 동화이야기라면
I would charge in and rescue you
제가 책임지고 당신을 구해내겠습니다
On a yacht baby we would sail
요트를 타고 우리는
To an island where we’d say I do
우리가 서약을 맺을 섬으로 갈겁니다
And if we had babies they would look like you
그리고 우리가 아이들이 있었다면 아이들은 당신을 닮을거예요
It’d be so beautiful if that came true
그런일들이 이루어 진다면 그것은 너무 아름다워서
You don’t even know how very special you are
당신조차 당신이 특별한존재라는 사실을 모를꺼예요


[Chorus]


You leave me breathless
당신은 나의 숨을 막히게 합니다
You’re everything good in my life
당신은 내 인생의 모든 좋은 것들 입니다
You leave me breathless
당신은 나의 숨을 막히게 합니다
I still can’t believe that you’re mine
나는 아직도 당신이 나의 사람이라는 게 믿겨지지가 않아요
You just walked out of one of my dreams
당신은 나의 꿈들 중 하나입니다
So beautiful you’re leaving me
당신은 너무 아름다워 나를 이렇게 만드는 군요
Breathless


And if our love was a story book
그리고 우리의 사랑이 이야기 책이였다면 
We would meet on the very first page
우리는 그 책의 가장 앞쪽에서 만났을것입니다
The last chapter would be about
그 책의 마지막 부분에서는
How I’m thankful for the life we’ve made
우리가 겪어온 인생에 대해 내가 얼마나 감사하게 생각하는지에 대해 말할것입니다
And if we had babies they would have your eyes
그리고 우리가 아이들이 있었다면 그들은 당신의 눈을 닮았을 것이에요 
I would fall deeper watching you give life
나는 그 깊은 눈망울에 빠져버릴것입니다
You don’t even know how very special you are
당신은 당신이 얼마나 특별한 존재인지 모르고 있어요


You leave me breathless
당신은 나의 숨을 막히게 합니다
You’re everything good in my life
당신은 내 인생의 모든 좋은 것들 입니다
You leave me breathless
당신은 나의 숨을 막히게 합니다
I still can’t believe that you’re mine
나는 아직도 당신이 나의 사람이라는 게 믿겨지지가 않아요
You just walked out of one of my dreams
당신은 나의 꿈들 중 하나입니다
So beautiful you’re leaving me
당신은 너무 아름다워 나를 이렇게 만드는 군요 


You must have been sent from heaven to earth to change me
당신은 천당에서 나를 바꾸기 위해 지구로 온것이 분명해요
You’re like an angel
당신은 나의 천사예요
The thing that I feel is stronger than love believe me
내가 당신에게 느낀 감정은 사랑보다 강하였습니다. 정말로요 
You’re something special
당신은 정말 특별한 존재입니다
I only hope that I’ll one day deserve what you’ve given me
나는 그냥 당신의 사랑을 받을 만한 사람이 되기를 희망합니다
But all I can do is try
그러나 내가 할수있는 것은 시도해 보는 것 밖엔 없네요 
Every day of my life
매일같이 


[Chorus]


You leave me breathless
You’re everything good in my life
You leave me breathless
I still can’t believe that you’re mine
You just walked out of one of my dreams
So beautiful you’re leaving me
Breathless


You leave me breathless
You’re everything good in my life
You leave me breathless
I still can’t believe that you’re mine
You just walked out of one of my dreams
So beautiful you’re leaving me
Breathless

서브넷 제로 , 올윈스 서브넷, VLSM , 사설 IP 주소

Posted in 카테고리 없음 by

★ 서브넷 제로

서브넷 제로란 서브넷 부분이 모두 0인 서브넷을 말한다.

예를 들어 172.16.0.0 네트워크를 18비트 마스킹 하면 다음과 같은 4개의 서브넷이 만들어진다.

172.16.0.0 , 172.16.64.0 , 172.16.128.0 , 172.16.192.0

이 중에서 첫 번째 서브넷인 172.16.0.0 255.255.192.0은 다음과 같이 서브넷 부분이 모두 0으로 되어 있으며, 이런 네트워크를 서브넷 제로라고 부른다.

11111111.11111111.11000000.00000000  (255.255.192.0)

10101100.00010000.00000000.00000000  (172.16.0.0)

앞의 예에서 서브넷 제로 172.16.0.0는 서브넷 마스킹을 하지 않은 디폴트 네트워크인 172.16.0.0과  혼돈될 수 있다. 따라서 네트워크를 서브넷으로 분할한 후에 가능하면 서브넷 제로는 사용하지 않는다.

그러나 네트워크 주소가 부족하면 서브넷 제로를 사용할 수 있으며, 이때 서느넷 제로도 사용하겠다은 의미인

ip subnet-zero 라는 명령어를 입력해 주어야 한다. IOS 버전 12.0부터는 ip subnet-zero가 디폴트이므로 별도로 명령어를 입력하지 않아도 된다. 


★ 올 원스 서브넷 (all-ones subnet)

올 원스 서브넷이란 서브넷 부분이 모두 1인 서브넷을 말한다.

앞서 예를 든 18비트 마스킹된 172.16.0.0 네트워크를 다시 한 번 보자.

172.16.0.0  172.16.64.0  172.16.128.0  172.16.192.0

이중에서 마지막 서브넷인 172.16.192.0 255.255.192.0은 다음처럼 서브넷 부분이 모두 1로 되어 있으며, 이런 네트워크를 올 원스 서브넷이라고 부른다.

11111111.11111111.11000000.00000000 (255.255.192.0)

10101100.00010000.11000000.00000000 (172.16.192.0) 

올 원스 서브넷의 브로드캐스트 주소 172.16.255.255는 서브넷 마스킹을 하지 않은 디폴트 네트워크의 브로드캐스트 주소인 172.16.255.255와 구분할 수 없으며 결과적으로 네트워크가 원하는대로 동작하지 않을 수 있다. 따라서 네트워크를 서브넷으로 분할할 때 가능하면 올 원스 서브넷은 사용하지 않는다.

그러나 서브넷으로 분할해도 네트워크 주소가 부족할 때는 올 원스 서브넷도 사용할 수는 있다. 올 원스 서브넷은 별도의 명령어 없이 사용한다.
 

★ VLSM (Variable Length Subnet Mask - 가변길이 서브넷 마스크)

VLSM 란 한 네트워크에서 사용하는 서브넷 마스크의 길이가 서로 다른 경우를 말한다.

VLSM 을 사용하면 IP 주소를 아주 효과적으로 사용할 수 있다.

예를 들어 라우터의 시리얼 구간에는 오직 2개의 호스트 주소만 필요하다. 특정 네트워크를 30비트로 서브넷 마스킹을 하면 사용할 수 있는 호스트 개수가 2개 이며, 이 것을 시리얼 구간에 설정하면 IP주소를 낭비하지 않고 사용할 수 있다.

* 시스코 2501의 경우 이더넷 인터페이스는 1개이고, 인터넷과 접속하기 위한 시리얼 인터페이스는 2개입니다. 그리고 시리얼 인터페이슨ㄴ DSU / CSU 라는 전용선 모뎀에 연결됩니다. 위와 같은 가정에서 우리가 라우터에 부여해야 하는 IP주소는 두개가 됩니다.

하나는 이더넷 인터페이스에 부여할 것하고 또 하나는 시리얼인터페이스에 부여할 IP주소입니다.!!


 
★ 사설 IP 주소

전세계적으로 인터넷에서 사용되는 IP주소는 IANA 에서 각 지역 및 국가별로 할당하고, 각 국가는 다시 ISP들에게, 각 ISP들은 다시 최종 수요자에게 부여한다. 이런 IP주소를 공인 IP라고 하며 전세계적으로 유일하여 중복되는 것 이 없다.

사설 IP주소란 IANA를 통해서 받지 않고 최종 수요자가 직접 부여해서 사용하는 주소를 말하며, 일정 규모 이상의 조직들은 모두 공인 IP와 함께 사설 IP주소를 사용하여 네트워크를 구축한다.

사설 IP를 사용하여 네트워크를 설꼐하면  IP주소의 수에 구애받지 않고, 유연한 IP주소 체계를 가질 수 있다. 또, 사설 IP는 인터넷에서 보이지 않기 때문에 보안성이 좋다. 그러나 공인 IP주소가 필요한 특정한 어플리케이션이 사설 IP에서는 동작하지 않을 수 있다.

사설 IP주소를 사용할 때 아무거나 사용하지 말고 RFC 1918에서 사설 IP용으로 할당해 놓은 것을 사용해야 인터넷 접속에 문제가 없다.(헹!  NAT를 이용하면 되지~!!!!)

RFC 1918의 규정에 따르면 다음과 같은 주소들은 사설 IP 주소로 사용하도록 권장하고 있으며, 이 주소는

IANA가 공인 인터넷 주소로 할당 하지 않는다. 따라서 다음의 사설 IP주소는 전세계 어떤 인터넷에서도 사용되지 않는 주소이다.


10.0.0.0/8 (1개의 클래스 A 네트워크)

172.16.0.0/16 - 172.31.0.0/16 (16개의 클래스 B 네트워크)

192.168.0.0/24 - 192.168.255.0/24 (256개의 클래스 C 네트워크)


loopback interface에 대한 설명

Posted in 카테고리 없음 by

Loopback Interface는 라우터에서 가상의 인터페이스를 생성하는 것을 의미합니다...

이 Loopback Interface를 설정하는 이유는 크게 3가지가 있습니다..

참고하셔서 궁금증이 풀리시길 바랍니다..

1. Loopback Interface는 interface Loopback0 라는 식으로 설정하구요..
ip address x.x.x.x x.x.x.x 라는 식으로 기존의 Interface 설정과 동일합니다.
하지만 이 녀석은 생성하는 그 순간부터 수동으로 Down을 시키지 않는한 항상
Up이 되어있기 때문에 이런 측면에서 사용하는 경우가 첫번째 경우입니다.

2. Loopback Interface를 사용하는 이유는 OSPF에서 자주 사용합니다.
일반적으로 OSPF는 BroadCast 구간 내에서는 DR과 BDR을 선출을 합니다.
기존의 IS-IS와는 달리 모든 네이버와 인접관계를 맺는 방식이 아니라 OSPF의
BroadCast영역에서는 동일한 Area 영역에 있는 라우터들은 DR과 BDR 이라는 녀석하고만 Full Adjancency를 맺습니다..
그리고 나머지 라우터들을 DROther라는 Two-way 인접관계를 형성하구요..
따라서 네트워크 토플로지내에 변화가 생기면 전체에게 Flooding하는 형식이 아니라 224.0.0.6 이라는 Multicast 주소를 이용해서 DR과 BDR에게 알리고요..
이러한 토플로지의 변화를 감지한 DR과 BDR은 224.0.0.5라는 Multicast 주소를 이용해서 나머지 라우터들에게 이러한 정보를 전달해 줍니다..
그런데 문제는 누가 과연 DR과 BDR이 되는냐인데요...
기본적으로 OSPF BroadCast 영역에서는 크게 3가지 조건으로 DR/BDR을 선출합니다.

- 라우터의 우선순위가 높은것 ( 기본적으로 모든 라우터가 동일한 값을 갖죠.)
- 우선순위가 같다면 논리적 인터페이스 주소가 높은것
(바로 여기서 LoopBack 인터페이스를 사용합니다.)
- 논리적 인터페이스가 없다면 마지막으로 물리적 인터페이스 주소가 높은값

즉 OSPF에서 논리적 인터페이스가 존재한다면 항상 물리적 인터페이스보다 우선
하기 때문에 이런 경우에 Loopback 인터페이스를 사용합니다.

3. 마지막은 BGP의 IBGP(Interior) 에서 사용을 하죠...
BGP는 크게 EBGP와 IBGP로 구분을 하는데요... BGP는 다른 일반 라우팅 프로토콜과 달리 TCP Port 179번을 이용해서 네이버를 맺습니다.
TCP를 사용하기 때문에 EIGRP, OSPF, IS-IS와는 달리 Reliable 통신을 제공하므로 BGP내에서는 따로 오류를 제어하는 메커니즘이 필요없다는 거죠.. 왜냐면
TCP가 이런 모든일을 하기때문이죠.. 이런 이유 때문에 BGP는 인터넷 구간에서 사용하는 거구요...
하지만 BGP의 경우는 이런 TCP의 특성을 따라가기 때문에 다른 라우팅 프로토콜과는 달리 반드시 neighbor을 수동으로 지정을 해야 합니다.
왜냐면 TCP 또한 반드시 Connection 통신을 하기때문이죠...
문제는 EBGP에서는 그다지 문제가 되지 않지만 IBGP내에서 BGP간에 서로 Full Mesh를 이용해서 서로 네이버를 생성했을때 하나의 BGP Router가 주변의 2개의
BGP Router와 인접관계를 맺을때 각각의 인터페이스로 관계를 맺게 된다면 그 인터페이스가 죽게되면 그 라인쪽으로는 통신이 불가능하다는 겁니다.

하지만 BGP는 앞에서처럼 굳이 직접 연결되어 있지 않아도 Ping만 된다면 네이버를 맺을수 있기 때문에 neighbor생성시 Loopback 인터페이스를 이용해서 네이버를 맺는다면 Full Mesh가 되어 있는 상황에서는 Redundency를 제공합니다.

만약 A Router의 Loopback0 Interface가 1.1.1.1 라면 이렇게 한다는 거죠..
B Router의 Loopback0 Interface가 3.3.3.3 이라면요..

A_Router> router bgp 65000
neighbor 3.3.3.3 remote-as 65000
neighbor 3.3.3.3 update-source loopback0

B_Router> router bgp 65000
neighbor 1.1.1.1 remote-as 65000
neighbor 1.1.1.1 update-source loopback0

라는 식으로 설정을 합니다..

EBGP상에서도 Loopback 인터페이스를 사용할수 있지만 기본적으로 EBGP상에서는 TTL의 값이 1로 되어있기 때문에 IBGP처럼 설정하면 네이버를 맺지 못하죠..
따라서 neighbor 3.3.3.3 ebgp-multihop 3 이런식으로 설정을 하면 Loopback
인터페이스를 이용해서 네이버를 맺을수 있습니다.

A_Router> router bgp 65000
neighbor 3.3.3.3 remote-as 65000
neighbor 3.3.3.3 update-source loopback0
neighbor 3.3.3.3 ebpg-multihop 3 ---> TTL의 값을 3으로 하겠다...

물론 다른 이유로 Loopback 인터페이스를 생성하는 경우도 있겠지만 제가 알고
있는 일반적인 Loopback 인터페이스의 용도는 이렇게 3가지 입니다..


 

IQ 160이상만 볼 수 있다는 최초 사진

Posted in 카테고리 없음 by



아이큐 160이상만 

이사진엔 총 사람 11명이 보입니다

일반사람에겐 그저.

사람 9명 정도밖에 안보인다고 합니다. 

눈을 크게 뜨고 보면 보입니다.

(동물 두마리도 있네요.. :D )





정답 : 왼쪽 위부터 첨탑을 기준으로 마주보는 사람2명, 첨탑 왼쪽 정면얼굴의 아기형상 1명, 첨탑 오른쪽 까마귀 배부분이 코가 되고
멀리 보이는 새가 눈이되는 사람1명, 위 맨 오른쪽 아치 끝에 오른쪽으로 보고 있는 여자 1명, 지팡이든 농부할아버지 1명, 오른쪽 아기와 여인 2명, 큰 형상으로 할아버지가 눈이되고 여인이 귀가 되는 사람 1명, 여인 치마 흰색띠에 매달려 있는 모양의 사람 2명
=총합 11명 #282626


난 왜 여인 치마 흰색띠에 매달려 있는 모양의 사람 2명이 안보이지? :(

좌뇌와 우뇌

Posted in 카테고리 없음 by


오른쪽 뇌와 왼쪽 뇌의 독립된 기능의 조화와 두뇌 기능의 100% 활용 문제는 아직도 완전히 해결되지 않은 신체의 미스터리중 하나다. 위 애니메이션은 자신이 평소에 오른쪽 뇌를 주로 쓰는 사람인지 아니면 왼쪽 뇌를 많이 쓰는 사람인지 판별할 수 있는 신기한 소재다.

 여인이 시계바늘 반대방향으로 돌고 있는 모습이 보이는 사람은 평소에 왼쪽 뇌를 사용하는 사람이다. 왼쪽 뇌는 우리가 아는 대로 논리적이고 세밀한 사고와 사실에 입각한 생각과 판단을 하는 기능을 하며 왼쪽 뇌가 잘 발달된 사람의 특징은 수학과 과학을 잘하고 이해력이 빠르며 기억력이 좋고 꼼꼼한 체질로 알려졌다.

만약에 위 애니메이션의 여인이 시계바늘 방향으로 도는 모습이 보이는 사람은 오른쪽 뇌를 사용하는 사람이다. 오른쪽 뇌는 창의력과 상상력 그리고 철학이나 종교, 예술 등 심미적 사고를 하는 기능을 하며 오른쪽 뇌가 잘 발달하면 창조적이고 탐구적이며 진취적이며 의욕적인 성격과 감성적이고 성급한 체질의 사람이 된다고 알려졌다.

위 그림이 신기한 이유는 훈련하기에 따라서 마음만 먹으면 오른쪽 뇌와 왼쪽 뇌를 번갈아 사용해 여인을 시계 방향 또는 반대 방향으로 돌 수 있게 조종할 수 있다는 것이다.

여인의 다리 또는 발과 그림자 사이에 시선을 집중하고 방향을 바꾸려고 생각하면 여인이 방향을 바꾸며 집중을 잘하면 두 다리가 평행이 될 수 있고 다리를 양 옆으로 또는 앞뒤로 계속 움직이게 할 수도 있다.

 위 영상은 오른쪽 뇌를 사용하지 않는 사람에게 오른쪽 뇌를 사용할 수 있는 방법을 터득케 해 왼쪽 뇌만 사용하는 사람이 갖지 못한 창의적이고 진취적인 능력을 갖게 해주고

오른쪽 뇌만 사용하는 사람에게 왼쪽 뇌를 사용하는 방법을 알게 해 필요시에 논리적이고 이성적인 사고 판단을 하도록 돕는다. 좌우 뇌의 기능을 100% 적절하게 활용해 유능한 사람이 되도록 변화시킨다는 것이다.

Linux 명령어

Posted in 단체 by

● LINUX 명령어 요약

1.기본 명령어

date : 현재의 날짜와 시간을 단말기 화면에 표시

who : 리눅스 시스템에 로그인 되어 있는 사용자들에 대한 정보를 화면에 표시

date;who;cat > sample.c : 한 줄에 두 개 이상의 명령어를 동시에 입력하고자 할 경우 명령어와 명령어 사이를 ; 으로 구분한다

cal 8 1998 : unix 시스템에 내장되어있는 달력을 화면에 출력

cat address.list : 파일의 내용을 화면에 출력한다

man date : 예약어나 명령어에 대한 온라인 매뉴얼

ls: 현재 위치한 디렉토리 아래에 있는 파일 및 서브디렉토리의 정보를 나열 <옵션>

-l: 파일의 모든 정보 출력

-c: 최근 변경한 시간 순서대로 출력

-d: 디렉토리 명만 출력

-F: 파일의 특성을 출력( /디렉토리 *실행화일)

-a: dot(.)으로 시작하는 파일의 이름을 포함한 모든 내용을 출력

alias dir ls -alF : 자주 쓰이는 명령어 ls를 다른 형태의 명령어 dir로 바꿀 때..

pwd : 현재 작업 디렉토리 출력 명령어

cd : 디렉토리 변경 명령어

2.디렉토리 관리 및 파일 관리 명령어

mkdir : 디렉토리 생성 명령어 (%mkdir [option] [directory name]

rmdir : 디렉토리 삭제 명령어

<옵션>

- r: rm -r test ; test의 하위디렉토리와 파일을 전부 삭제

- i: rm -i test ; 삭제 여부를 사용자에게 물어 본다

cat : 파일을 작성하거나 파일의 내용을 간단하게 출력

cat test1.c cat > test1.c

touch : 내용이 없는 빈 파일을 생성, 이미 생성된 파일의 수정 시간 갱신 touch [option] [시간] [파일명]

more [file name] : 한 번에 한 화면씩 파일의 내용을 표준 출력

-내용을 보지 않고 종료시 q 나 Q 키를 누른다

page [option] [file name] : 한 번에 한 화면씩 파일의 내용을 표준 출력(=== %pg)

nl [file name] : 지정한 파일의 내용을 츨력할 때 맨 앞에 행 번호를 붙쳐서 출력

file test.c : test.c라는 파일의 형태를 출력

cp :시스템내에 있는 특정 파일을 복사

- mkdir temp :temp라는 디렉토리 생성

- cp sample test temp :temp라는 디렉토리 밑에 sample 과 test 라는 파일을 복사

- mkdir example

- cp -r temp example --temp라는 디렉토리 아래에있는 모든 내용을 example디렉토리에 복사

mv [file name1] [file name2]: file name1을 file name2로 이름 변경

mv [file1] [file2] [directory1]: file1, file2를 directory1으로 이동

mv [directory1] [directory2]:directory1의 모든 내용을 directory2로 이동

-->명령어 cp, mv, rm에서 option -i는 사용자에게 여부를 묻는 옵션입니다

rm test1 test2 test3 : test1,test2,test3 파일을 삭제

rm -r quit : quit 디렉토리 및 모든 내용을 삭제

ln test1 test2 : test1과 test2라는 2개의 파일을 연결

(unlink ; 연결 해제)

find: 사용자가 지정한 특정 범위에 해당하는 모든 파일을 검색 - find / -name test1.c -print ; 최상위 루트 디렉토리부터 검색하여 검색된 파일을 한 행에 하나씩 표준 출력

find . -name test1.c -print ; 현재의 작업 디렉토리에서 검색 find / -size +1000 -print ; 최상위 루트에서 크기가 1000블록 이상인 파일 검색

find . -size -1000 -print : 현 디렉토리에서 크기가 1000블록 이하인 파일 검색

find . -mtime +10 -print : 10일 이전에 수정된 파일 검색

find . -mtime -10 exec rm {} \: ; 10일 이내에 수정한 파일을 검색하여 모두 지운다

chmod : 파일 및 디렉토리에 이미 정해진 접근 허가 모드를 변경

- 사용 형식: %chmod [ugoa] [+-=] [rwx] [file name]

u: 파일 소유자, g: 그룹, o: 기타 사용자, a: 모든 사용자

+: 사용허가부여, -: 사용허가박탈, =: 허가 취소

r: 읽기 허가, w:쓰기 허가, x: 실행 허가

특정 사용자를 지정하지 않으면 모든 사용자를 의미한다

chmod go+r test.c ; 소유자 그룹과 기타 사용자에게 읽기 허가

chmod ugo-w test.c ; 소유자,그룹,기타 사용자에게 읽기 허가 박탈

chmod +x test.c

chmod o -rwx test.c

r = 4, w = 2, x =1

chmod 744 test.c

-rwxr--r-- 1 edul user 235 Oct 15 13:23 test.c

chmod 724 test.c

-rwx-w-r-- 1 edul user 235 Oct 15 13:23 test.c

* : dot(.)을 제외한 모든 문자와 대응하며 모든 파일명을 대표하는

메타 문자 %ls *a* , %ls t*

? : " " " 임의의 한 문자만을 대신





3.입력과 출력에 관한 명령어

입력> 출력 >>

date > date.out : 이전 내용이 지워지고 새로운 내용이 저장

date >> date.out : 이전 내용과 함께 새로운 내용 첨가

file test.out : test 파일을 입력으로 받아서 file 명령을 실행하고

-cat test.out: test.out에 출력

test: Ascll text

2>>, 2> : 오류 출력 제지정

tty : 현재 사용하고 있는 단말 장치의 이름을 경로와 함께 표준 출력

lpstate : 프린터의 현제 상태 (활성화: enable, 비활성화: disable)

lp -c temp.c : 내용이 변경되어도 문제가 지속되지 않도록미리 출력될 파일을 복사

lp -n7 /etc/lp/temp : 7장 프린트

lp -m temp.c : 출력이 끝난후 사용자에게 전자우편을 보냄

lp -t"chon bing hee" : test.out ; chon bong hee라는 표제를 달아 줌

cancel [print name] : 프린터 취소

disable -c [print name] : 지정한 프린터에서 현제 출력중인 작업 취소

disable -w laser-3 : 모두 인쇄한 다음 프린터를 disable 상태로 만든다

disable -c -r "out of paper" laser-1 : 주석을 달아 놓는다

grep [option] 형태 [화일명] : 정규식을 이용 패턴 지정

-grep -i tom sample.c : sample.c 라는 파일에서 tom 이라는 문자열을 대소문자 구분 없 이 검색

-grep -n tom sample : 행 번호와 함께 출력

-grep -i "tom is" sample : 공백은 " "로 표기

-grep -v tom sample : tom이라는 형태를 포함하지 않는 행을 출력

fgrep helo test1 test2 : 복수개의 파일 지정,단순한 문자열 검색

egrep "mary {su | mj)" sample : sample 파일에서 mary su 와 mary mj를 포함하는 행 을 동시 검색 다양한 정규식 사용

cut -c10-17 sample : sample 파일에서 칼럼 단위10-17을 절단

-cat sample

computer science

computer graphics

-cut -c10-17 sample : sample 파일에서 칼럼 단위10-17을 절단 -cat sample : sample 출력결과 > science graphics

paste : 파일 합성 명령어 (-d: 구분자를 지정)

-cat aaa

qqq

www

-cat bbb

eee

rrr

paste -d; aaa bbb

qqq;eee

www;rrr : ; 으로 구분자를 지정

cmp test1 test2 : 서로 다른 두 파일을 비교

dircmp test test : 서로 다른 두 디렉토리 비교

4.백업 및 복사에 관한 명령어(rfd:디스켓, rct:카트리지테이프, rmt: 테이프)

하드 ----> 디스켓

tar -cvf /dev/rfd0c test1 (c: 저장되는 파일들이 디스크의 처음 부터 기록, v:기록되는 화일명 화면 출력)

tar -tvf /dev/rfd0c : 디스켓의 파일 목록 확인

디스켓 ----> 하드

tar -xvf /dev/rfd0c test1 : 지정한 파일 복원

동일한 하드에서 %tar -cvf test1.tar test1 compress test.c (파일 압축)

uncompress test.c.Z (압축 풀기)

test.c.Z (파일 생성)

zcat test.c.Z (파일 보기)

pack test.c (파일 압축)

unpack test.c.z :test.c.z (파일 생성)

pcat test.c.z (파일 보기)

Non-preemptive(비선점) : 커널 모드

kernel : 생성되는 프로세스마다 PCB 부여하고 관리



5.멀티 태스킹에 관련된 명령어

Multitask

foreground : 하나의 명령이 실행되어 결과를 출력할때까지 다른 명령을 수행 할 수 없다

background : 하나의 명령을 수행시킨후 그 수행의 종료 이전에 다른 명령을 수행 하는 것

---> 명령어 끝에 &로 표시 (cc -o test1 test1.c &)

ps -l : 프로세스에 관한 모든 상태 정보 출력

ps -e : 현제 실행중인 모든 프로세스에 관한 정보 출력

ps ps -t 00 : 지정된 터미널에서 실행중인 프로세스에 관한 정보 출력

nice [-정수값:1~39 , 20으로 설정] 명령어 -->우선 순위 변경 명령어

정수값이 높을수록 우선 순위가 낮다 (nice -10 cc -o test test1.c)

at : 수행 시간 지정 명령어 -->at 11:30 pm

cc test.c

<옵션>

-r: 이전에 지정된 작업 취소

-l : 지정된 작업 번호 출력

(sleep 20; cc -o sample sample.c)& -->백그라운드 실행, 20초 뒤 프로그램 컴파일 (sleep 10; ps -el) --> 10초후 모든 프로세서 상태 출력

time cc -o test test.c --수행 시간 출력 명령어

Running : 현제 백그라운드 수행중인 상태

Stopped : fg로 수행되다가 ^D로 잠시 중단된 상태

Terminated : Kill 명령을 사용해 강제로 종료된 상태

Done : 백그라운드 프로세서의 수행이 완전히 종료된 상태

Exit : 백그라운드 프로세서가 수행도중 오류 때문에 빠져 나온 상태

jobs : 백그라운드로 수행중인 모든 프로세서의 상태 출력

fg %1(작업 번호) : 백그라운드로 수행중인 작업을 포그라운드로 전환

bg %1( " ) : 포그라운드로 " " 백그라운드로 전환

wait [작업번호] : 백그라운드 실행 종료

kill [번호] : 프러세서 강제 종료 명령어

---> 강제 종료가 안될 경우 -9옵션을 사용 %kill -9 1239

nohup cc -o sample1 sample1.c & 1132[PID번호] ---> 백그라운드로 실행, 로그 아웃이나 중지 신호후에도 프로세서의 수행 계속



6.shell 관련 명령어

alias : UNIX 명령어 이름에 쉘이 인식할 수 있는 새로운 이름, 즉 별칭을 지정하는 것

- alias readmail cat /usr/mail/chonbh

- alias dir ls -al

-alias type cat

쉘 Bourne쉘 (sh), C 쉘 (csh) , K 쉘 (ksh)

setenv PS1 "bonghee>"

echo $PS1

bonghee> : 기본 프로프트 정의

ctrace ---c : 프로그램의 추적

cb [화일명.c] : c프로그램의 형식을 정돈

lint [option] [파일명] : compile error 검사

cc test.c

a.out ---> 생성

cc :c컴파일러

CC :c++ , x-windows

 

참조 : http://anuis.andong.ac.kr/%7Ekih/linux1.html

 

출처-쉽게 풀이된 LINUX 명령어 활용 사전 (PS:서점가면 팜)


[C/C++] C++ 수업내용 Pointer

Posted in 단체/ㄴ대학 전공 수업 by

#include <iostream>

using namespace std;

int main(){

  
 char s1[10];
 char *s2 = "Hello!";

 s1 = s2;                     // s1도 주소이고 s2도 주소인데 왜 Error가 날까?
                                     s1은 포인터가 아닌 배열자체 이므로 s2의 주소를 s1에
                                     넣는다고 하면 배열의 구조가 없어지게 되고 포인터가
                                     되므로 선언한 것과 모순되기 때문에 Error가 나는 것이다.
 

/*
char s1[10] = "Hello!";
 char *s2;

 s2 = s1;                     // s1의 구조는 배열이지만 s1자체로는 주소를 의미하므로 
                                     s2 포인터 자체에 입력이 가능하다.
*/

 //for(int i=0; (s1[i] = s2[i])!='\0'; i++);
                                 // s2 포인터의 배열은 * (s2 + i) 를 의미(대채가능)하므로
                                     선언가능하다.

 //for(; (*s1++ = *s2++)!='\0';);
                                 // *s1++ 이 안되는 이유는 배열의 이름(s1)는 Constant이기
                                     떄문이다. 즉 참조만 가능하고 수정은 불가능하다.
                                     위의 *s1++은 s1++이 먼저 실행되기 떄문에 주소값 자체를
                                     수정하는 것이라서 Error가 난다.
 
 cout<<"s1 = "<<s1<<endl;
 cout<<"s2 = "<<s2<<endl;

 return 0;
}

-------------------------------------------------------------------------------
#include <iostream>

using namespace std;

int main(){

 char s1[10] = "Hello!";
 char *s2;

 s2 = s1;
 
 cout<<"s2 = "<<s2<<endl;
 cout<<"s2 = "<<*s2<<endl;
 cout<<"s2 = "<<&s2<<endl;

 return 0;
}

결과값 :
s2 = Hello!
s2 = H
s2 = 0012FF70
Press any key to continue