디시인사이드 갤러리

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

갤러리 본문 영역

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

Brad(203.250) 2012.02.15 13:59:31
조회 2462 추천 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 - -
AD 따뜻한 겨울나기! 방한용품 SALE 운영자 25/11/27 - -
303858 회사에 여자개발자 신입이 들어왔음.. [5] ㄴㅇㅀ(221.138) 12.02.19 283 0
303857 영어공부 [6] ㅇㅇ(119.71) 12.02.19 77 0
303856 C언어 구조체중에서 이거 왜 안되나요 [10] 12(59.12) 12.02.19 132 0
303855 고닉은 세탁 불가한 2012년 1월 잉여력 랭킹 [7] dot(125.128) 12.02.19 151 0
303854 다시 리눅스 깔까 ㅡㅡ) [2] 땡칠도사갤로그로 이동합니다. 12.02.19 93 0
303852 Delete 가 안되는데 좀 봐줘 [7] Delete(14.36) 12.02.19 66 0
303851 내 문제는 이거 같다 [3] 공학적닭튀김갤로그로 이동합니다. 12.02.19 60 0
303849 objective c 공부 - protocol [4] 통맥갤로그로 이동합니다. 12.02.19 65 0
303847 입갤과 동시에 퇴갤 [2] ㅇㅇㅎ(110.47) 12.02.19 48 0
303846 프로그래밍을 공부하다가 3개의 벽을 만나게 되었는데... [15] 바보플머(218.155) 12.02.19 252 3
303844 바보플머 영어강좌2 [1] 바보플머(218.155) 12.02.19 95 0
303841 objective c 공부 - selector [5] 통맥갤로그로 이동합니다. 12.02.19 84 0
303840 php에서 templete언더바 라는거 쓸려고하는데 처음에 어떻게 깔아? [1] 형들(222.107) 12.02.19 81 0
303839 콘솔기반게임 병신..애자.. [3] 모미지갤로그로 이동합니다. 12.02.19 138 0
303838 금딸일기-3일차 [1] ㅇㅇㅎ(110.47) 12.02.19 158 0
303837 학점은행제 회사 들어갈때 인정해줘? GoodStar갤로그로 이동합니다. 12.02.19 165 0
303836 잘자염. ㅇㅇㅎ(110.47) 12.02.19 29 0
303835 후킹관련된건데 뭘공부해야될지 모르겠어요 가르켜주세요 ㅜ [14] 부경인갤로그로 이동합니다. 12.02.19 117 0
303834 드림스파크가 많이 바끼었슴 [2] [성대아싸]갤로그로 이동합니다. 12.02.19 102 0
303827 이거 뭘까요!! [10] 농구킹갤로그로 이동합니다. 12.02.19 121 0
303826 내일은 여친이랑 데이트나 해야지 공돌이대장갤로그로 이동합니다. 12.02.19 45 0
303825 에고... 이것좀.. 알려주세혀... [25] 코딩...?갤로그로 이동합니다. 12.02.19 184 0
303823 아휴 ㅠㅠc언어 때문에 속이 퍽퍽함 ㅜㅜ [15] 코딩...?갤로그로 이동합니다. 12.02.19 98 0
303820 c언어 배우기 좋은 사이트 있어? [7] ㄹㅇㄴㅁ(175.205) 12.02.19 143 0
303818 굿나잇 복룡갤로그로 이동합니다. 12.02.19 33 0
303817 진짜 글 잘쓴다. 진짜 같음. 필력甲 [1] ㅇㅇㅎ(110.47) 12.02.19 110 1
303816 자자 복룡갤로그로 이동합니다. 12.02.19 26 0
303815 씹태연 저거 뭐냐? [8] (116.125) 12.02.18 130 0
303814 오늘 부터 자바공부 시작하는 자바늅입니다. ㅎㅇ염 [3] ㅇㅇㅎ(110.47) 12.02.18 71 1
303813 살빼야되는데 공학적닭튀김갤로그로 이동합니다. 12.02.18 31 0
303812 여자친구 갖고 싶다. [1] 독신귀족K갤로그로 이동합니다. 12.02.18 46 0
303811 정수형 변수에 입력받은 숫자 하나 문자열로 바꾸고 싶은데 무슨 함수써야됨 [9] 모미지갤로그로 이동합니다. 12.02.18 105 0
303810 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ [2] 모미지갤로그로 이동합니다. 12.02.18 53 0
303807 프로그램 만들 때 고자 컴터도 필요하다. [2] 생물학(122.35) 12.02.18 67 0
303806 대학 신입생인데, 노트북 구입 때문에 고민이야 형들 도와줘 [18] 징박갤로그로 이동합니다. 12.02.18 192 0
303805 천조국 딸래미 조련법 [6] 공돌이대장갤로그로 이동합니다. 12.02.18 164 1
303804 모미지는 봄미다 [3] 땡칠도사갤로그로 이동합니다. 12.02.18 56 0
303803 원서 말하는거면 이거 말하는건가? [3] ㅇㅇㅎ(110.47) 12.02.18 69 0
303802 문득 생각남 프로그래머명언 [6] 복룡갤로그로 이동합니다. 12.02.18 126 0
303801 나 집에 파이썬 입문서하고 파이썬 해킹 프로그래밍 책있는데 말야. [2] 독신귀족K갤로그로 이동합니다. 12.02.18 294 0
303800 내 닉네임이 어때서 [3] 모미지갤로그로 이동합니다. 12.02.18 61 0
303799 난 오타쿠는아니다만 [2] 복룡갤로그로 이동합니다. 12.02.18 46 0
303798 다른 갤에 온줄 알았다 [5] 땡칠도사갤로그로 이동합니다. 12.02.18 66 0
303797 새벽반그딴거없다? [1] 복룡갤로그로 이동합니다. 12.02.18 47 0
303796 현재코갤은 [1] 복룡갤로그로 이동합니다. 12.02.18 48 0
303795 스트리밍 질문 [1] ㅁㅁ(115.137) 12.02.18 41 0
303794 자고싶어ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ [13] 모미지갤로그로 이동합니다. 12.02.18 103 0
303793 아나 전기장판... [4] 공돌이대장갤로그로 이동합니다. 12.02.18 46 0
303791 자바 초급수준이 어느정도? [5] 인코더(121.186) 12.02.18 145 0
303790 유동닉 고정 멤버 정리 좀 해보자구 횽들 생물학(122.35) 12.02.18 43 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2