Linux API/linux2015. 10. 21. 14:50

die.net에서 ioremap 찾으니 mmap이 나오는 신기한 현상..

그래서 찾아보니..


ioremap은 커널에서 쓰는 함수

mmap은 유저레벨에서 사용하는 함수


즉, 모듈에서는 ioremap

어플리케이션에서는 mmap으로


[링크 : http://torystory.tistory.com/20]



ioremap 가상주소 -> 물리주소

iounmap 물리주소 -> 가상주소

[링크 : http://mudweb.tistory.com/11]

'Linux API > linux' 카테고리의 다른 글

signal  (0) 2015.10.26
select()  (0) 2015.10.26
리눅스 모듈 - 세마포어 / 뮤텍스  (0) 2015.10.21
linux kernel module module_init() 매크로  (0) 2015.10.21
리눅스 타이머 예제 setitimer() / sigaction()  (0) 2015.10.13
Posted by 구차니
Linux API/linux2015. 10. 21. 13:32

써봐야지 머... ㅠㅠ


[링크 : http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/system_programing/IPC/semaphores]

[링크 : http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/Thread/Beginning/Mutex]

[링크 : http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/system_programing/Book_LSP/ch07_Thread]


sema_init()

[링크 : http://lxr.free-electrons.com/source/include/linux/semaphore.h]



뮤텍스 = 바이너리 세마포어


우선 하는 일에 대해서 mutex는 binary semaphore와 많이 동일하고요.

구조적인 측면과 동작 측면에서는 mutex는 owner라는 개념 있는데 반해 binary semaphore는 owner라는 개념이 없다는 차이가 있습니다.

 

이로 인해 mutex는 lock한 task만 unlock 할수 있는데 반해 semaphore는 아무 task나 unlock이 가능하죠.

[링크 : http://www.iamroot.org/xe/QnA/36692]


[링크 : http://ninako21.tistory.com/500]

[링크 : http://topnanis.tistory.com/195]



+ 2015.10.29

[링크 : http://egloos.zum.com/tiger5net/v/5537603]

'Linux API > linux' 카테고리의 다른 글

select()  (0) 2015.10.26
mmap / ioremap  (0) 2015.10.21
linux kernel module module_init() 매크로  (0) 2015.10.21
리눅스 타이머 예제 setitimer() / sigaction()  (0) 2015.10.13
clock_gettime  (0) 2015.08.09
Posted by 구차니
Linux API/linux2015. 10. 21. 12:24

module_init()는 __initcall()로 치환되고

__initcal()은 static inicall_t __initcall_modulename __init_call = modulename

으로 치환되어

initcall_t 타입의 정적변수로 생성된다.

결국은... 다른 파일에서 __init_call 하나로 끌어갈수 있으려나?

(물론 내부 인터페이스 함수가 존재할 듯?)


#define __initcall(fn) static initcall_t __initcall_##fn __init_call = fn

#define module_init(x)  __initcall(x);


[링크 : http://www.compsoc.man.ac.uk/~moz/kernelnewbies/documents/initcall/kernel.html]


#define __exitcall(fn) \

static exitcall_t __exitcall_##fn __exit_call = fn

#define module_exit(x) __exitcall(x);


[링크 : https://www.kernel.org/pub/linux/kernel/people/marcelo/linux-2.4/include/linux/init.h] 


#define module_param(name, type, perm)                          \

        module_param_named(name, name, type, perm)


#define module_param_named(name, value, type, perm)                        \

        param_check_##type(name, &(value));                                \

        module_param_cb(name, &param_ops_##type, &value, perm);            \

        __MODULE_PARM_TYPE(name, #type)


#define module_param_cb(name, ops, arg, perm)                                 \

        __module_param_call(MODULE_PARAM_PREFIX, name, ops, arg, perm, -1, 0)


#define __module_param_call(prefix, name, ops, arg, perm, level, flags) \

        /* Default value instead of permissions? */                     \

        static const char __param_str_##name[] = prefix #name;          \

        static struct kernel_param __moduleparam_const __param_##name   \

        __used                                                          \

    __attribute__ ((unused,__section__ ("__param"),aligned(sizeof(void *)))) \

        = { __param_str_##name, THIS_MODULE, ops,                       \

            VERIFY_OCTAL_PERMISSIONS(perm), level, flags, { arg } }


#define __moduleparam_const const


[링크 : http://lxr.free-electrons.com/source/include/linux/moduleparam.h]


[링크 : http://www.joinc.co.kr/.../Site/Embedded/Documents/WritingDeviceDriversInLinux]

[링크 : https://www.kernel.org/doc/htmldocs/kernel-hacking/routines-init-again.html]

'Linux API > linux' 카테고리의 다른 글

select()  (0) 2015.10.26
mmap / ioremap  (0) 2015.10.21
리눅스 모듈 - 세마포어 / 뮤텍스  (0) 2015.10.21
리눅스 타이머 예제 setitimer() / sigaction()  (0) 2015.10.13
clock_gettime  (0) 2015.08.09
Posted by 구차니
Linux API/linux2015. 10. 13. 16:09


ITIMER_REAL

decrements in real time, and delivers SIGALRM upon expiration.

실시간으로 감소하고 만료시 SIGALRM을 전송한다.


ITIMER_VIRTUAL

decrements only when the process is executing, and delivers SIGVTALRM upon expiration.

프로세스가 실행중잉 동안만 감소하고 만료시 SIGVTALRM을 전송한다.


ITIMER_PROF

decrements both when the process executes and when the system is executing on behalf of the process. Coupled with ITIMER_VIRTUAL, this timer is usually used to profile the time spent by the application in user and kernel space. SIGPROF is delivered upon expiration.

프로세스가 실행중이거나 시스템이 프로세스 대신 작동하는 동안에도 감소한다. ITIMER_VITUAL과 결합하여 유저 시간과 커널 시간을 프로파일링 하는데 사용된다. SIGPROF가 만료시 전송한다.


Timer values are defined by the following structures:

struct itimerval {

    struct timeval it_interval; /* next value */

    struct timeval it_value;    /* current value */

};


struct timeval {

    time_t      tv_sec;         /* seconds */

    suseconds_t tv_usec;        /* microseconds */

};


The function getitimer() fills the structure pointed to by curr_value with the current setting for the timer specified by which (one of ITIMER_REAL, ITIMER_VIRTUAL, or ITIMER_PROF). The element it_value is set to the amount of time remaining on the timer, or zero if the timer is disabled. Similarly, it_interval is set to the reset value.

it_value 값은 타이머의 남은 값을 설정하거나 타이머를 사용하지 않기 위해 0으로 설정한다. 유사하게 it_interval는 초기화 값을 설정한다.

The function setitimer() sets the specified timer to the value in new_value. If old_value is non-NULL, the old value of the timer is stored there.


Timers decrement from it_value to zero, generate a signal, and reset to it_interval. A timer which is set to zero (it_value is zero or the timer expires and it_interval is zero) stops.

it_value로 부터 0으로 타이머가 감소하고, 시그널을 생성하고, it_interval로 초기화 한다. 타이머가 0으로 설정되면 정지한다(it_value가 0이거나 타이머가 만료되고 it_interval이 0일 경우)


Both tv_sec and tv_usec are significant in determining the duration of a timer.


Timers will never expire before the requested time, but may expire some (short) time afterward, which depends on the system timer resolution and on the system load; see time(7). (But see BUGS below.) Upon expiration, a signal will be generated and the timer reset. If the timer expires while the process is active (always true for ITIMER_VIRTUAL) the signal will be delivered immediately when generated. Otherwise the delivery will be offset by a small time dependent on the system loading.

[링크 : http://linux.die.net/man/2/setitimer]


그래서 둘다 설정하지 않으면 멈추는 거구나..

다만. it_value의 값은 초기 1회에 대한 타이머이고

it_interval의 값은 2회 부터의 값에 대한 타이머가 된다.

timer.it_value.tv_sec = 0;

timer.it_value.tv_usec = 250000;

timer.it_interval.tv_sec = 0;

timer.it_interval.tv_usec = 250000;


[링크 : http://linuxspot.tistory.com/28] 


[링크 : https://kldp.org/node/132754]

[링크 : http://manofpro.tistory.com/290]

[링크 : http://forum.falinux.com/zbxe/index.php?document_srl=413903]


[링크 : http://www.joinc.co.kr/modules/moniwiki/wiki.php/article/Timesr_in_Linux]

'Linux API > linux' 카테고리의 다른 글

select()  (0) 2015.10.26
mmap / ioremap  (0) 2015.10.21
리눅스 모듈 - 세마포어 / 뮤텍스  (0) 2015.10.21
linux kernel module module_init() 매크로  (0) 2015.10.21
clock_gettime  (0) 2015.08.09
Posted by 구차니
Linux API/v4l2015. 9. 13. 16:03

API는 아니지만 분류할 곳이 모호하니..


일단 라즈베리 파이에서 CSI를 통해 영상을 받아서 

kernel space v4l driver(offcial)로 받으려고 했던 노가다는 실패했는데

user space v4l로 하는 글들이 갑자기 잔뜩 보여서 나중에 시도할 예정..


엥? 인증키?

V4L2(Video4Linux2) 드라이버 활성화

pi@openmake ~ $ sudo modprobe bcm2835-v4l2


V4L2(Video4Linux2) 인증키 설치

pi@rasplay ~ $ wget http://www.linux-projects.org/listing/uv4l_repo/lrkey.asc && sudo apt-key add ./lrkey.asc


[링크 : http://www.rasplay.org/?p=6257] 

[링크 : http://www.rasplay.org/?p=6277]


How to install or upgrade UV4L on Ubuntu Raring Ringtail


To install UV4L open a terminal and type the following commands:

$ wget http://www.linux-projects.org/listing/uv4l_repo/lrkey.asc && sudo apt-key add ./lrkey.asc


Add the following line to the file /etc/apt/sources.list :

deb [arch=amd64] http://www.linux-projects.org/listing/uv4l_repo/raring/ raring main


$ sudo apt-get update

$ sudo apt-get install libfuse3 uv4l


Now the UV4L core component is installed. 


Optionally, each driver can be installed separately from the core module:


$ sudo apt-get install uv4l-uvc

$ sudo apt-get install uv4l-xscreen

$ sudo apt-get install uv4l-mjpegstream

[링크 : http://www.linux-projects.org/modules/sections/index.php?op=viewarticle&artid=12]


$ wget http://www.linux-projects.org/listing/uv4l_repo/lrkey.asc && sudo apt-key add ./lrkey.asc

$ sudo vi /etc/apt/sources.list

deb http://www.linux-projects.org/listing/uv4l_repo/raspbian/ wheezy main

$ sudo apt-get install uv4l uv4l-raspicam


$ sudo apt-get install uv4l-raspicam

패키지 목록을 읽는 중입니다... 완료

의존성 트리를 만드는 중입니다

상태 정보를 읽는 중입니다... 완료

다음 새 패키지를 설치할 것입니다:

  uv4l-raspicam

0개 업그레이드, 1개 새로 설치, 0개 제거 및 4개 업그레이드 안 함.

1,471 k바이트 아카이브를 받아야 합니다.

이 작업 후 3,890 k바이트의 디스크 공간을 더 사용하게 됩니다.

받기:1 http://www.linux-projects.org/listing/uv4l_repo/raspbian/ wheezy/main uv4l-raspicam armhf 1.9.31 [1,471 kB]

내려받기 1,471 k바이트, 소요시간 4초 (336 k바이트/초)

Selecting previously unselected package uv4l-raspicam.

(데이터베이스 읽는중 ...현재 80650개의 파일과 디렉터리가 설치되어 있습니다.)

uv4l-raspicam 패키지를 푸는 중입니다 (.../uv4l-raspicam_1.9.31_armhf.deb에서) ...

man-db에 대한 트리거를 처리하는 중입니다 ...

uv4l-raspicam (1.9.31) 설정하는 중입니다 ...


$ sudo apt-get install uv4l
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다
상태 정보를 읽는 중입니다... 완료
다음 새 패키지를 설치할 것입니다:
  uv4l
0개 업그레이드, 1개 새로 설치, 0개 제거 및 4개 업그레이드 안 함.
558 k바이트 아카이브를 받아야 합니다.
이 작업 후 1,872 k바이트의 디스크 공간을 더 사용하게 됩니다.
받기:1 http://www.linux-projects.org/listing/uv4l_repo/raspbian/ wheezy/main uv4l armhf 1.9.8 [558 kB]
내려받기 558 k바이트, 소요시간 3초 (180 k바이트/초)
Selecting previously unselected package uv4l.
(데이터베이스 읽는중 ...현재 80640개의 파일과 디렉터리가 설치되어 있습니다.)
uv4l 패키지를 푸는 중입니다 (.../archives/uv4l_1.9.8_armhf.deb에서) ...
man-db에 대한 트리거를 처리하는 중입니다 ...

uv4l (1.9.8) 설정하는 중입니다 ... 


found this thread when searching for a hardware encoder, not for c920 issues.

[링크 : http://raspberrypi.stackexchange.com/questions/4412/streaming-h264-with-logitech-c920] 


if you try ffmpeg instead of vlc for playback, you will probably encounter this problem: https://ffmpeg.org/trac/ffmpeg/ticket/1387

[링크 : https://wiki.matthiasbock.net/index.php/Logitech_C920,_streaming_H.264]




결론은.. v4l firmware 쪽의 문제로 업데이트 하고 그러라는데..

재발된건지..알수가 없다. 대부분 스트리밍을 위해서 cvlc로 live 영상 없이 하다 보니.. 차이점이 보이기도 하고

pi-cam과 usb webcam의 차이인거 같기도 하고...

'Linux API > v4l' 카테고리의 다른 글

v4l2 debug  (0) 2022.07.13
v4l2-ctl 밝기 조절  (0) 2022.07.06
v4l2 timestamp  (0) 2017.04.19
리눅스에 웹캠 연결시 인식  (5) 2009.12.06
Posted by 구차니
Linux API/linux2015. 8. 9. 23:57

리눅스에서는 librt.so를 이용해서 쓰는 녀석으로

조만간 사라질 gettimeofday를 대체하는 함수이다.


[링크 :  http://sunyzero.tistory.com/161]

[링크 :  http://linux.die.net/man/3/clock_gettime]

'Linux API > linux' 카테고리의 다른 글

select()  (0) 2015.10.26
mmap / ioremap  (0) 2015.10.21
리눅스 모듈 - 세마포어 / 뮤텍스  (0) 2015.10.21
linux kernel module module_init() 매크로  (0) 2015.10.21
리눅스 타이머 예제 setitimer() / sigaction()  (0) 2015.10.13
Posted by 구차니
Linux API/alsa2015. 5. 29. 10:47

간만에 ALSA 생각이 나서 검색..



아무튼 대충의 구조는


USER application

ALSA Library

ALSA Kernel Driver

Audio Driver

Hardware


이런식?




[링크 : http://www.alsa-project.org/~tiwai/lad2003/lad.html]

'Linux API > alsa' 카테고리의 다른 글

alsa 함수들  (0) 2024.06.04
alsa 예제  (0) 2024.06.04
alsa timestamp  (0) 2014.11.26
alsa async  (0) 2014.11.26
alsa debug function  (0) 2014.11.18
Posted by 구차니
Linux API2015. 3. 31. 17:00

lirc는 xbmc를 리모컨으로 조작하려고 찾다보니 나오는 프로젝트

라즈베리 파이에서는 GPIO를 이용해 직접 값을 읽어 오는 것으로 보이고


IR의 캐리어 주파수는 38khz 을 주로 사용하며

Customer IR / IrDA 등을 지원하는 것으로 보인다.


일단은.. 전송 매체가 공기/적외선을 사용할 뿐 그냥 시리얼통신이라고 보면 되려나 싶기도 한데

캐리어는 대개 전송하려는 속도보다 높다라고 하니 캐리어가 38kHz 라는 건 그 이하의 속도로 통신을 한다는 의미이려나?


[링크 : http://en.wikipedia.org/wiki/Consumer_IR]

[링크 : http://en.wikipedia.org/wiki/Carrier_signal]

[링크 : http://en.wikipedia.org/wiki/Carrier_frequency]

[링크 : http://www.lirc.org/]


이런 부품을 쓰는데.. 직접 회로 구성가능하면

IR 수광부 + 증폭기 써도 무방하긴 하겠지만.. 캐리어 주파수가 문제이려나?

[링크 : http://www.eleparts.co.kr/EPX3BFVV]  TSOP4838

'Linux API' 카테고리의 다른 글

cups api  (0) 2018.12.20
system wait stdout  (0) 2018.10.22
vaapi vdpau uvd  (6) 2015.03.26
linux 최대 thread 갯수  (0) 2015.01.22
getopt() / getopt_long()  (0) 2014.11.19
Posted by 구차니
Linux API2015. 3. 26. 01:09

VAAPI(Video Acceleration API) - intel

VDPAU(Video Decode and Presentation API for Unix) - nvidia

UVD(Unified Video Decoder) - AMD


[링크 : http://en.wikipedia.org/wiki/Video_Acceleration_API]

[링크 : http://en.wikipedia.org/wiki/VDPAU]

[링크 : http://en.wikipedia.org/wiki/Unified_Video_Decoder]


XBMC 보다 보니 이런저런 가속 방법이 나와서 조사하니
3대 메이져 제조사에서 제공하는 API들의 이름이다.

[링크 : http://ubuntuforums.org/showthread.php?t=2177664]

[링크 : http://www.phoronix.com/scan.php?page=news_item&px=MTM1NDk]



'Linux API' 카테고리의 다른 글

system wait stdout  (0) 2018.10.22
lirc - linux IR Remote control  (0) 2015.03.31
linux 최대 thread 갯수  (0) 2015.01.22
getopt() / getopt_long()  (0) 2014.11.19
공유메모리  (0) 2014.09.02
Posted by 구차니
Linux API2015. 1. 22. 19:55

크게 제한은 없다.

단, 메모리의 영향을 받기 때문에 메모리가 적을수록 쓰레드의 숫자도 적어질수 밖에 없다.



cat /proc/sys/kernel/threads-max


number of threads = total virtual memory / (stack size*1024*1024)

Total Virtual Memory: ulimit -v (default is unlimited, thus you need to increase swap memory to increase this)

Total Stack Size: ulimit -s (default is 8Mb)


[링크 : http://stackoverflow.com/questions/344203/maximum-number-of-threads-per-process-in-linux]

'Linux API' 카테고리의 다른 글

lirc - linux IR Remote control  (0) 2015.03.31
vaapi vdpau uvd  (6) 2015.03.26
getopt() / getopt_long()  (0) 2014.11.19
공유메모리  (0) 2014.09.02
timeval, gettimeofday()  (0) 2013.08.20
Posted by 구차니