디시인사이드 갤러리

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

갤러리 본문 영역

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

Brad(203.250) 2012.02.15 13:59:31
조회 2461 추천 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/11/24 - -
이슈 [디시人터뷰] 충무로가 주목하는 신예, '세계의 주인' 서수빈 운영자 25/11/24 - -
AD 대학생 필수템! What's in my Bag 운영자 25/11/21 - -
303401 채용공고 났다 ㅋ [4] (58.75) 12.02.15 146 0
303400 횽들 급한질문좀 급함니다 hcl이 뭔가여??? [6] 겨울달력갤로그로 이동합니다. 12.02.15 69 0
303399 갑자기 이클립스가 존나 느려졌어 [1] (58.75) 12.02.15 48 0
303397 다층신경망 짜기는 했는데, 역전파 학습이 헬이다... [1] 생각놀이갤로그로 이동합니다. 12.02.15 134 0
303396 게임개발자 채용사이트 보니깐 아무개(220.126) 12.02.15 191 0
303394 참고로 넥슨 게임프로그래머 채용공고 [2] 아무개(220.126) 12.02.15 238 1
303393 아무개형 이게 맞는지 모르겠는데 예전에 찍은 댓글 [7] Aven갤로그로 이동합니다. 12.02.15 109 0
303392 형들 [2] 쒦뚫쉚뚫샒휆뚫뚫쒦갤로그로 이동합니다. 12.02.15 50 0
303391 넥슨 고졸입사 가능하냐2 [12] 아무개(220.126) 12.02.15 1366 0
303390 요즘 병특추세가 전부 모바일이네.. 흐허허허.. [6] Aven갤로그로 이동합니다. 12.02.15 123 0
303388 C++ 동적할당 질문좀... [10] SODMaster갤로그로 이동합니다. 12.02.15 114 0
303387 액션스크립트 질문 ㅠ 김태희남편갤로그로 이동합니다. 12.02.15 27 0
303386 정통부에 대한 개인적인 생각 [1] 싴보이갤로그로 이동합니다. 12.02.15 69 0
303385 파이선 공부 [7] 쒦뚫쉚뚫샒휆뚫뚫쒦갤로그로 이동합니다. 12.02.15 128 0
303384 앱개발자 월급과 기간협의대해서 궁금점을 올립니다. [6] 카오드림드(1.237) 12.02.15 133 1
303381 ★★요즘 프갤 댓글 알바들이 물갈이 되었습니다★★ 에어로홍갤로그로 이동합니다. 12.02.15 59 0
303380 오늘은 파괘왕아저씨 안왔네 ㅇㅇㅎ(211.246) 12.02.15 43 0
303378 자바 한개만 물어볼게여 ㅠㅠ [7] (58.75) 12.02.15 87 0
303376 형들 c에서 빨간 엑박 메모리 에러 있잖슴요...... [1] SoliCode갤로그로 이동합니다. 12.02.15 40 0
303374 웹에이션시 다니는 프로그래머 님들앙 정말 님네 회사에선 웹디가 웹표준 1(220.117) 12.02.15 82 0
303372 아니왜 웹에이젼시에선 디자이너가 디자인에 div웹표준코딩까지 해야되냐그! [3] 1(220.117) 12.02.15 124 0
303371 와 프갤성님들 거의다 해결했는데 조금만 더 도와줘요 [6] 거의다됨(121.157) 12.02.15 73 0
303370 링크드리스트는 누가 만들었음? [5] 모미지갤로그로 이동합니다. 12.02.15 107 0
303369 관계식같은거 빨리 생각해내는법좀.. [2] 코딩...?갤로그로 이동합니다. 12.02.15 62 0
303368 야이세끼들아!!! [10] y녀6디리(220.118) 12.02.15 106 0
303365 성님들 간단한 C언어 질문점 ㄷㄷ;; [7] 프로 게이™갤로그로 이동합니다. 12.02.15 91 0
303364 하선이 이뻐죽겠네 [1] 씨발라드세요갤로그로 이동합니다. 12.02.15 80 0
303363 아...핫식스와 레드불은좋지않아.. [2] 데헷(220.86) 12.02.15 79 0
303361 아오 왜 wrapper class를 만들면 WM_PAINT를 못 쓰지 나다라마법사(1.237) 12.02.15 41 0
303360 윈7, 비주얼스튜디오2010에서 iostream헤더파일이 안 된다.. [4] insight갤로그로 이동합니다. 12.02.15 213 0
303358 인터넷 카페에서 스터디 가르쳐주는 사람들은 뭐야? [5] (58.75) 12.02.15 104 0
303357 춤추는 망상박동 자살춤갤로그로 이동합니다. 12.02.15 60 0
303355 앱등이 캠프가자~ dogfootson갤로그로 이동합니다. 12.02.15 43 0
303354 코딩 스타일 투표 [20] 들럿갤로그로 이동합니다. 12.02.15 178 0
303352 24살 고졸 입니다. 제발 도움을 주세요 [8] 막장고졸(211.37) 12.02.15 432 0
303351 더미다 풀수 있냐 없냐 [3] ㅇㅇ(121.162) 12.02.15 76 0
303350 핸드폰 산지 일년만에 [2] 들럿갤로그로 이동합니다. 12.02.15 51 0
303349 usb 오토런이 ㅄ됐음 도와주셈 시발 [3] 쥐돌이론(119.194) 12.02.15 58 0
303347 가장 뿌듯한 순간 [5] SeHwa갤로그로 이동합니다. 12.02.15 179 0
303346 돈 모아서 여자칭구 만드러야지 [1] y녀6디리(220.118) 12.02.15 56 0
303345 동생씨가 테트리스 제작 도전 중 -_-;; [2] 생각놀이갤로그로 이동합니다. 12.02.15 107 0
303344 Vim 배울려는 초보자인데 Vim 한글 입력할때 다 이런건가요 [8] Vim늅늅(119.205) 12.02.15 100 0
303343 이거 띄어쓰기 어케해야댐 [5] 모미지갤로그로 이동합니다. 12.02.15 88 0
303342 님들아 ㅠㅠ 혹시 visual 6.0 잇으신분?... 제발.. [9] 코딩...?갤로그로 이동합니다. 12.02.15 86 0
303341 게임 핵 이야기 나와서 말인데요..... [7] SoliCode갤로그로 이동합니다. 12.02.15 177 0
303340 너희들도 조심해라. 깜놀했다. [4] 바보플머(222.121) 12.02.15 191 0
303337 짜장면 냠냠 (58.75) 12.02.15 50 0
303336 지금 빌어먹을 여성부가 ㅈ같은데 [2] 나리링갤로그로 이동합니다. 12.02.15 80 0
303332 가상서버호스팅 질문 늅늅 [1] dogfootson갤로그로 이동합니다. 12.02.15 69 0
303331 6개월동안 인터넷 자바 스터디그룹하면 얼마나 늘까??? (58.75) 12.02.15 79 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2