디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

망고210보드 임베디드 관련 질문

Brad(203.250) 2012.02.15 13:59:31
조회 2463 추천 0 댓글 10


혹시 망고210보드 사용해서 센서를 이용해본 사람 있다면 답글부탁...


작년에 ATmeaga128로 외부 adc, 모터, 가속도 센서등 다뤄봤구..

현재 네이버에 임베디드 크레이지 보이즈라는 카페에서 망고210 보드를 구매해서 공부하고 있는 학생인데..

부트로더 커널 및 진저브레드 포팅까지 하구 디바이스 드라이버 만들고 JNI 이용해서 안드로이드 어플상에서 레지스터 값을 조절해서

LED깜빡이는것 까지 성공을 했어. 그래서 이제 AVR처럼 레지스터 세팅을 하고 간단한 Zigbee 모듈을 UART로 테스팅 해보려구 하는데

근데.. AVR같은경우는 이미 많은 책이 있어서 어떤 레지스터를 건드려야 어떻게 세팅이 되고 하는걸 금방 알수 있는데 이건 뭐.... ㅡㅡ

LED 킬때만 해도 센서 금방 하겠다 싶었는데 막상 해보니 관련 자료도 없고 이미 짜놓은 UART 디바이스 드라이버 소스를 보니 되게 막막하네.

혹시 간단한 센서를 S5PV210 칩에서 구동시켜본 사람 있으면 조언좀 부탁할게..

요약 1. 커널 및 파일시스템 포팅 완료.
       2. 이제 디바이스 드라이버를 작성하고 안드로이드 어플리케이션에서 구동시키기 위해 JNI소스 짜고 테스팅 완료.
       3. BUT 실제 센서를 이용해보려구 하니 다시 또 막막.... 답답한 마음에 일단 글을 올려봄.. 잘 아는분이 있다면 헬프

P.S 디시는 처음와보는데 나처럼 임베디드에 관심있는 학생이 많더라구...
        혹시 망고보드를 처음 해보는 학생이 있다면 도움이 되라고 밑에 관련 소스를 올릴게

125498424F2B8456117067
전체적인 시나리오

1. 어플리케이션에서 JNI library호출
2. JNI library 소스를 참고해보면 저수준 입출력 파일 호출 사용 (커널 시스템 콜)
3. /dev/mango210_led_device 에서 사용할 디바이스 드라이버의 MAJOR_NUMBER, MINOR_NUMBER를 읽어들임.
4. device driver 소스 실행 => 하드웨어 작동
 
빌드 방법 

1. mango210LED.c파일은 Make해준다. (Makefile이 없을경우 Makefile을 만들어야 된다.)

obj-m := mango210LED.o
KDIR := //커널의 주소
PWD := $(shell pwd)
default:
        $(MAKE) -C $(KDIR) M=$(PWD) modules

2. 안드로이드 project폴더에서 jni 폴더를 만든뒤 JNI소스와 Android.mk파일을 넣은뒤 ndk-build수행. (Android.mk파일 소스)

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := mango210LedApp
LOCAL_SRC_FILES := mango210LedApp.c

include $(BUILD_SHARED_LIBRARY)

3. project 폴더에 ..../libs/armeabi 폴더가 생성되고 lib파일명.so파일이 생성되었음을 확인한다.
4. 이클립스 상에서 새로고침을 누르고 .so파일이 인식되었는지 확인을 하고 아래 소스를 작성후 Ctrl+F11 빌드 및 실행을 한다.
5. 가상머신에서 정상적으로 동작이 되면 망고보드로 .apk파일과 .so파일을 각각 /system/app, /system/lib폴더로 옮겨준다. (옮기기 전에 chmod로 권한 변경을 해주자) 
6. nfs부팅후 insmod 명령으로 디바이스 드라이버 모듈은 삽입하고  mknod /dev/mango210_led_device c 240 2를 실행해준다. chmod 777 /dev/mango210_led_device
7. 앱을 실행한뒤 동작을 확인한다. 
/*
 * mango210LED.c 디바이스 드라이버 소스
 */

#include <linux/init.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/kernel.h>
#include <linux/errno.h>
#include <linux/types.h>
#include <linux/fcntl.h>
#include <linux/gpio.h>
#include <plat/gpio-cfg.h>

MODULE_LICENSE("Dual BSD/GPL");

#define MANGO210_LED_MAJOR_NUMBER  240
#define MANGO210_LED_DEVICE_NAME   "mango210_led_device"

// int (*open) (struct inode *, struct file *);
int mango210_led_open(struct inode * inode_p, struct file * file_p)
{
    printk("[DEV] mango210_led_open() major:%d, minor:%d\n",
           MAJOR(inode_p->i_rdev), MINOR(inode_p->i_rdev));
 return 0;
}

// int (*release) (struct inode *, struct file *);
int mango210_led_release(struct inode * inode_p, struct file * file_p)
{
    printk("[DEV] mango210_led_release()\n");
 return 0;
}

static void led_1_on(void)
{
    gpio_set_value(S5PV210_GPJ4(0), 0);
}

static void led_1_off(void)
{
    gpio_set_value(S5PV210_GPJ4(0), 1);
}


// int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
int mango210_led_ioctl(struct inode * inode_p, struct file * file_p,
                      unsigned int command, unsigned long argument)
{
    printk("[DEV] mango210_led_ioctl() command:%x, argument:%x\n", command, (int)argument);

    switch(command)
    {
    case 1:
        if(0 == argument)
        {
            printk("[DEV] IND LED 1 Control, Off\n");
            led_1_off();
        }
        else if(1 == argument)
        {
            printk("[DEV] IND LED 1 Control, On\n");
            led_1_on();
        }
        else
        {
            printk("[DEV] Invalid IOCTL Argument: %x\n", (int)argument);
            return -1;
        }
        break;


 default:
        printk("[DEV] Invalid IOCTL Command: %x\n", command);
        return -1;
        break;
    }

    return 0;
}

struct file_operations mango210_led_file_oper =
{
    .owner   = THIS_MODULE,
    .open    = mango210_led_open,
    .ioctl   = mango210_led_ioctl,
    .release = mango210_led_release,
};

    
int mango210_led_init(void)
{

    int retVal,err,num=0,num1;
    printk("[DEV] mango210_led_init() is called.\n");
  
    err = gpio_request(S5PV210_GPJ4(num), "GPJ4");//GPG1 request
    if (err) {
         printk(KERN_INFO "GPJ4(%d) request error : %d\n",num, err);
    } else {
         s3c_gpio_setpull(S5PV210_GPJ4(num), S3C_GPIO_PULL_NONE);
         gpio_direction_output(S5PV210_GPJ4(num), S3C_GPIO_OUTPUT);
     }
        
    led_1_on();

    retVal = register_chrdev(MANGO210_LED_MAJOR_NUMBER, MANGO210_LED_DEVICE_NAME, &mango210_led_file_oper);


    printk("[DEV] return value: %d\n", retVal);
    
    
    gpio_free(S5PV210_GPJ4(num)); 
    gpio_free(S5PV210_GPH1(2));

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 연말 모임 가는 곳마다 가장 인싸일 것 같은 스타는? 운영자 25/12/08 - -
AD 루틴 ON! 운동 찐템! 지금 할인 중 운영자 25/11/27 - -
303297 네이버 웬만한 블로그 다 뒤져도 안된다 ㅠㅠ [2] (58.75) 12.02.15 101 0
303295 이클립스 어젠 잘되더니 개색..ㅡㅡ [1] (58.75) 12.02.15 76 0
303291 신경망 구현할 줄 알면 뭐가 좋음? [3] 생각놀이갤로그로 이동합니다. 12.02.15 109 0
303289 공돌이는 이런거 보면 꼴림? [4] se1xman(110.47) 12.02.15 176 0
303287 느어렇어ㅜㄷㅎㅁ [3] 들럿갤로그로 이동합니다. 12.02.15 76 0
303286 프로그래밍 ebook 뭐 볼만한거 없음? [1] 공돌이대장갤로그로 이동합니다. 12.02.15 86 0
303281 비타 삼 y녀6디리(14.63) 12.02.15 54 0
303278 금딸 알고리즘 [1] 싸이의홈스틸갤로그로 이동합니다. 12.02.15 120 0
303276 여자 여자갤러있음? [4] (58.75) 12.02.15 89 0
303273 여기 성님들은 왜이렇게 착하심? [1] 싸이의홈스틸갤로그로 이동합니다. 12.02.15 94 0
303272 횽들 USB로 리눅스 부팅 [1] goding(221.143) 12.02.15 114 0
303270 와 어제 12학번 패기에 지릴뻔했어 나리링갤로그로 이동합니다. 12.02.15 161 0
303268 엘가드라는 맛폰겜 해본 형있음? 길가던놈갤로그로 이동합니다. 12.02.15 38 0
303266 엔씨소프트, 엔트리브소프트 인수 [1] ㅇㅇ(210.113) 12.02.15 72 0
303265 개발 5년차.. 적정연봉..얼마 받으면 될까? 역시천재갤로그로 이동합니다. 12.02.15 159 0
303264 임베 리눅 장비제어 유저랜드 프로그램으로 안 하나? [3] dot(125.128) 12.02.15 66 0
303263 요즘 닷넷 시장 어때? [1] 공돌이대장갤로그로 이동합니다. 12.02.15 113 0
303262 뭘 싸우고 있냐 리눅스든 윈도우든 편한거 쓰면 되지 [2] kukyakya(143.248) 12.02.15 75 0
303261 망고210보드 임베디드 관련 질문 (2) Brad(203.250) 12.02.15 67 0
303260 리눅스를 왜 쓰는가에 대한 고찰 [2] y녀6디리(175.253) 12.02.15 118 0
망고210보드 임베디드 관련 질문 [10] Brad(203.250) 12.02.15 2463 0
303258 누가 Flip 구현좀 해줘 제발제발제발 ㅠㅠㅠ [4] 제발(121.157) 12.02.15 81 0
303257 자바스크립트 좀 봐줭 [2] ㅁㄴㅇㄹ(168.115) 12.02.15 71 0
303256 리눅스와 ms를 나누는건 라이센스 비용 딱 하나 만 봐도 [1] 올체갤로그로 이동합니다. 12.02.15 108 0
303254 (리눅스)프로세스의 실제사용자가 유효사용자와 다른 경우는 언제야??? 에이시아(203.90) 12.02.15 57 0
303253 운동선수들 도박 이모군(175.114) 12.02.15 65 0
303252 서버프로그래밍 중인데 DB관련해서 질문좀 할게요. [5] SODMaster갤로그로 이동합니다. 12.02.15 93 0
303250 메모장만드는데 질문좀.. [2] 늅늅(203.237) 12.02.15 88 0
303249 리눅스를 사용해서 제대로된 개발을 해봤어야 리눅스의 참맛을알지.. [4] 씨발라드세요갤로그로 이동합니다. 12.02.15 144 0
303248 gui vs cui [3] 서현빠돌이갤로그로 이동합니다. 12.02.15 119 0
303247 리눅스는 제대로 쓸려면 멀티 부팅 하면 안됨. ㅇㅇ [4] ☎v2.0™갤로그로 이동합니다. 12.02.15 113 0
303246 횽들아 서현이랑 사귀려면 어찌해야 하나여?? [2] 서현빠돌이갤로그로 이동합니다. 12.02.15 83 0
303245 예전에 hotmail에서 메일서버를 윈도아니고 프리비에스디썼다던데 ㄴㅇㄹ(112.136) 12.02.15 44 0
303244 맥은 BSD 계승한거져?? [1] [성대아싸]갤로그로 이동합니다. 12.02.15 84 0
303243 예전에 성능때문에 윈도우서버 안썼다지만 요새는 죄다 윈도서버 [1] ㄴㅇㄹ(112.136) 12.02.15 79 0
303242 리눅스를 쓰는데 x윈도우만 쓰면 변태인가염?? [1] 서현빠돌이갤로그로 이동합니다. 12.02.15 69 0
303241 BSD 계열 사용하다가 Linux 사용하면. ㅇㅇ ☎v2.0™갤로그로 이동합니다. 12.02.15 79 0
303240 밥은 먹고 겔질 하는거냐??? 서현빠돌이갤로그로 이동합니다. 12.02.15 51 0
303239 리눅스 머하러 쓰냐. 프리비에스디가 있는데 [1] ㄴㅇㄹ(112.136) 12.02.15 95 0
303238 리눅스 쓰는 애들 보면 대부분 윈도우 멀티부팅함 ㅋㅋ [8] ㅇㅇㅇ(58.77) 12.02.15 261 0
303237 으헝.. 도와주세염 ㅠㅠ [5] 코딩...?갤로그로 이동합니다. 12.02.15 60 0
303235 [떡밥] 횽들 심심한데 스도쿠 만드는 코드 짜봐용.ㅋㅋㅋ [3] 생물학(122.35) 12.02.15 102 0
303234 솔직히 리눅스 왜쓰냐? [9] ㅇㅇㅇ(58.77) 12.02.15 147 0
303233 성다아싸 소환 [5] C_Perl갤로그로 이동합니다. 12.02.15 69 0
303231 수학공부좀 기초부터 다시하고싶은데요.. 봉크라이시스갤로그로 이동합니다. 12.02.15 68 0
303230 내가 예전에 말이지 생물학(122.35) 12.02.15 42 0
303227 늅늅 성대아싸횽 서몬! [5] dogfootson갤로그로 이동합니다. 12.02.15 74 0
303223 내가 원조 거칠게다 ㅋㅋㅋㅋㅋ [1] 서현빠돌이갤로그로 이동합니다. 12.02.15 86 0
303221 수학적 사고능력 키우려면 어떻게 해야함 [5] 1(118.220) 12.02.15 105 0
303220 거칠게 닉 쓰는거 곽횽인데... [1] 쿄스케갤로그로 이동합니다. 12.02.15 69 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2