리눅스 & 안드로이드2013. 2. 25. 13:38

Ubuntu for smartphone을 NEXUS 4에 올려보고 싶었는데, 회사에서는 Ubuntu를 local에서 사용할 때 가장 간단한 방법인
virtualbox를 사용할 수 없었다.

이런 저런 시도 끝에, 가장 속편한 방법이 멀티부팅 이었다.


멀티부팅 후, 필요한 건 GRUB을 다시 NTLDR(?)로 복원하는 일!

찾아보니 미디어를 가지고 다시 부팅해야 한다고 되어 있더라.

그래서 혹시 Windows 가동중에는 안되는 건가 하고 고민하고 있다가,
그냥 ISO 이미지를 마운트 해서 시도해 보았는데 잘 된다 : )

방법은 간단하다.

cmd(도스창)을 실행해서, 마운트한 이미지의 아래 경로로 이동하여 명령어를 실행하면 끝!


G:\boot>bootsect /nt60 c: /mbr


여기서 G:는 iso 이미지가 마운트 된 드라이브, C: 는 Windows 7이 설치된 드라이브 임


Posted by 세월의돌
디바이스 드라이버2013. 2. 4. 09:53

근래에 linux(android) device driver 관련 작업을 하느라 정말 고생이 많다.

일하는 중에 주기적으로 특정 register 값을 출력 해서 확인해야 할 필요가 있었는데,

workqueue를 이용해서 할 수 있는 방법을 찾다가 발견하여 정리했다.


1. workqueue를 생성하여 초기화 하고,

2. kernel timer에 의해 주기적으로 호출 될 함수 선언한다.

3. 함수 내에서 workqueue 실행을 위해 scheduling 한다.

4. main thread(?)에서 kernel timer 자료구조를 초기화 하고, 함수를 등록한다.

(제거는 각자가 알아서-0-)


static void test_wq(struct work_struct *unused);

struct timer_list test_timer;

static DECLARE_WORK(testwq, test_wq);

static void test_wq(struct work_struct *unused)

{

    printk("write your own message out!!!\n");

}

static void test_timer_func(unsigned long data)

{

    test_timer.expires = jiffies + (HZ*3);

    add_timer(&test_timer);

    schedule_work(&testwq);

}


void main(void)

{

    init_timer(&test_timer);
    test_timer.expires = jiffies + HZ;
    test_timer.data = 0;
    test_timer.function = &test_timer_func;
    add_timer(&test_timer);
}


Posted by 세월의돌