리눅스 커널 프로그래밍 시 궁금한 점이 있어 질문드려요~
글쓴이: mjcho86 / 작성시간: 수, 2011/11/23 - 2:54오후
안녕하세요.
리눅스 커널 프로그래밍을 하고 있습니다.
상황은 다음과 같습니다.
1. 같은 기능을 하되 처리를 다르게 하는 2개의 모듈이 있다.(A,B라 가정)
2. 두 개의 모듈을 모두 module 방식이 아닌 built-in 방식으로 컴파일해서 커널에 포함시킨다.
3. 포함된 두 개의 모듈(정확히는 모듈은 아니지만 편의상)이 사용자가 원하는 모드로 코드를 수행하길 원한다.
이상이 요구사항인데요.
현재 두가지를 모두 같은 netdev에 등록하여 컴파알 하는데까지는 성공했는데
특정한 파라매터 값을 넘겨줘 원하는 모듈A 나 모듈B가 동작시키는 부분을 어떻게 구현해야 하는지 모르겠습니다.
해당 부분에 경험이 있으신분들께 조언 구합니다^^
Forums:
proc을 이용하면 되지 않을까요?
Built-in이라고 말씀하셨으니, 특정한 parameter를 넘겨준다는 것은 module loading time때는 아니겠죠??
별도의 ioctl을 만들 것이 아니라면 proc으로 해결할 수 있지 않을까요??
句日新, 日新 日新 又日新.
proc 이라면
답변 주셔서 감사합니다!
/proc/file
이거 이용하라는 말씀이신거 같은데 proc 사용해서 특정 모듈로 동작하도록 가능한가요?
간단한 설명이나 예제 참조할만한 코드 있으시면 링크같은게 있을까요~?
하나의 모듈내에서의 흐름이면 proc이나 ioctl을 써서 할텐데
지금은 두개의 모듈을 사용하고 사용하지 않고를 제어할 수 있는 뭔가의 방법을 찾고 있답니다^^
특정 모듈로 동작한다는 것이..
어떤 상태에 따라서 device driver A를 쓰느냐, B를 쓰느냐를 결정하는 것인가요??
다 알고 계시는 내용이겠지만.. 혹시나해서.. 그냥 써봅니다.. ^^;
두개의 모듈이 각각 module_init()과 module_exit()를 통해서 초기화/종료 코드가 실행될텐데요, proc의 입력에 따라서 각각의 module의 module_init()과 module_exit()를 스위칭 해주면 가능하지 않을까요?
메모리나 IRQ 사용에는 신중을 기해야겠네요.
句日新, 日新 日新 又日新.
쉽게 생각하면....
ioctl/proc등을 이용해서 환경 값을 설정하고
그 설정값에 따라서 분기하게 코드를 짜면 될텐데요...
아주 많이 사용하고 아주 일반적인 방법인데 무엇이 문제인지를 이해가 안되네요.
커널의 유저모드의 프로세스와 달아서
전역 변수는 정말 아무 곳에서나 접근이 가능 합니다.
물론 static은 안되겠고, 커널 모듈간의 공유라면, EXPORT_SYMBOL 을 사용해야 하지만,
근본적으로는 접근에 제약이 없습니다.
예를 들면,
모듈 A와 B가 동작이 동일하다면, function pointer를 이용해서 layer를 만들고
설정 값에 따라서 호출 할 모듈을 선택하게 구현 해도 될듯 하네요.
대표적인게 파일 시스템도 이렇게 구현 되어 있죠....
답변감사합니다~!
저도 처음에는 분기 처리하려 했는데 지시 및 요구사항이 저렇게 내려와서 어쩔수 없었답니다!
파일 시스템쪽 참조해서 한번 살펴볼께요~
답변 감사합니다.
댓글 달기