개방형OS 응용프로그램 개발하기 3편

이번에는 실행된 프로그램 각 기능들을 확인 할 차례에요.
각 버튼을 하나 씩 클릭해 볼까요?

 

[바쁜 현대인을 위한 친절한 2줄 정리]

1. 오픈SW기능 설명 (Config Info, System Info 등등…)

2. 개발관련 궁금한 점은 markany-linux@markany.com 로 부탁 드려요 😎

 

오픈SW 기능 확인
CONFIG INFO (with CRC)
오픈소스-CONFIG-CRC
Config Info (With CRC) 버튼을 클릭한 화면

먼저 맨 위에 있는 “Config Info (With CRC)”라고 적힌 버튼부터 클릭해 봅시다.

Config Info (With CRC)은 실행파일과 같은 경로에 있는 config.cfg 파일의 내용을
Key = Value 형식으로 읽어와서  Key, Value 모두 CRC값까지 보여주는 버튼
입니다.

*CRC: 순환 중복 검사(Cyclic Redundancy Check): 데이터의 오류가 있는지를 확인하기 위한 체크 값을 결정하는 방식

cofig.cfg
cofig.cfg 파일 내용

이렇게 구성된 파일 내용을 프로그램에서 그대로 읽어서 활용할 수 있는 기능을 구현합니다.

 

해당 내용을 자세하게 확인하시려면 user/agent_data.cc 파일과 user/lib_utility/config_handler.c 파일을 확인하시면 됩니다.

오픈SW 기능 확인
SYSTEM INFO
System Info 화면
System Info 화면

System Info는 현재 프로그램을 실행하고 있는 OS의 정보들과 각종 네트워크 관련 정보들을 보여주는 버튼입니다.


/etc/os-release 파일의 내용을 분석하여 획득한 정보와 /proc/net/route 파일에 있는 현재 활성화된 NIC의 IP 주소를 획득한 내용, 그리고 /proc/version 파일에서 커널 정보를 획득한 내용입니다.

 

관련 내용은 user/agent_data.cc 파일과 user/lib_utility/system_info.c 파일을 참조하세요.

오픈SW 기능 확인
PROCESS INFO
Process Info 화면

Process Info는 프로그램이 위치한 절대경로와 프로그램이 이미 실행 중인지 확인하는 용도의 파일을 절대경로로 보여주는 버튼입니다.


프로세스의 파일 경로는 /proc/프로세스ID/exec에서 가져온 정보이고 Single Instance 경로는 임의로 정한 경로입니다.


관련 내용은 user/agent_data.cc 파일을 참조하세요!

오픈SW 기능 확인
PROC INFO
Proc Info 화면

Proc Info는 시스템에 적재된 커널 모듈 및 커널 심볼을 검색할 수 있는 창을 띄워주는 버튼입니다.

해당 정보들은 /proc/modules, /proc/kallsyms에서 획득한 정보입니다.

관련 내용은 user/proc_search_dialog.cc, user/agent_data.cc, user/lib_utility/proc_handler.c 파일을 참조하세요.

검색창을 처음 실행하게 되면 개방형 OS에서 기본으로 검색되는 커널 모듈명과 심볼명이 자동으로 적혀 있습니다.

검색 버튼을 클릭해볼까요?

Proc Info 검색창에서 검색 버튼을 클릭한 모습

커널 모듈 hid와 커널 심볼 printk도 있습니다. 개발에 도움이 되는 기능이라 포함해놓았습니다. 

오픈SW 기능 확인
TIME INFO
Time Info 버튼을 클릭한 화면
Time Info 버튼을 클릭한 화면

Time Info는 버튼을 클릭한 시점의 시간을 여러 출력형식으로 보여주는 버튼입니다.


이 정보는 C언어 표준 함수 localtime, POSIX 표준 함수 gettimeofday에서 가져옵니다.

관련 내용은 user/agent_data.cc, user/lib_utility/time_handler.c 파일을 참조하세요.

커널모듈 올리기

맨 처음 Sysfs Info/Netlink Info 버튼을 클릭하면 아래와 같은 화면이 나옵니다.

‘커널모듈이 준비가 되지 않았다’는 멘트가 나오죠.

커널모듈을 올리지 않았을 때 나오는 ‘커널 모듈이 준비되지 않았습니다’ 화면

이는 OpenCode에서 제공하는 커널 모듈을 적재하지 않았기 때문인데요.
이를 해결하기 위해 바로 “sudo insmod maOpen.ko”로 커널 모듈을 올려봅시다.

커널 모듈은 관리자 권한으로 동작해야 하기 때문에 sudo 라는 권한 상승 명령어를 필요로 합니다.

커널 모듈을 올렸다면 lsmod 명령어로 커널 모듈이 잘 올라왔는지 확인해 봅시다.

실패” width=”736″ height=”500″> sudo 없이 insmod -> 실패
성공” width=”736″ height=”500″> sudo를 포함하여 insmod -> 성공
lsmod 로 커널 모듈 정보 확인하기
lsmod 로 커널 모듈 정보 확인하기
오픈SW 기능 확인
SYSFS INFO

리스트에서 커널에 적재된 OpenCode 모듈이 확인되었다면 다음 단계로 Sysfs info 버튼을 클릭합니다.

커널 모듈 maOpen.ko를 적재한 후 Sysfs Info 버튼을 클릭한 모습
커널 모듈 maOpen.ko를 적재한 후 Sysfs Info 버튼을 클릭한 모습

커널모듈을 올리고 나니 이번에는 아까와는 다른 내용을 보여 줍니다.

화면에 나오는 정보가 공개되게끔 했고, 사용자 프로그램에서는 이 정보를 받아서 그대로 보여준 것입니다.

그리고 Sysfs Info에 대해서 말씀드리면 커널 모듈에서 유저단의 애플리케이션에게 정보를 전달하기 위하여 VFS(가상 파일 시스템)로 저장한 정보를 출력하는 버튼입니다.

여기에 대한 정보는 커널 모듈에서 생성한 /sys/kernel/openCode/ 디렉토리 내의 info, version 가상 파일에서  획득합니다.
관련 내용은 user/agent_data.cc, kernel/sysfs*.c 파일을 참조하세요.

오픈sw기능 확인
netlink info
커널 모듈 maOpen.ko를 적재한 후 Netlink Info 버튼을 클릭한 모습

Netlink Info는 Linux에서 커널 모듈과 유저단의 애플리케이션이 정보를 교환하기 위하여 제공되는 통신 방법으로, 커널 모듈에서 제공받은 정보를 보여주는 버튼입니다.

netlink를 통해 전달되는 정보는 /sys/kernel/openCode/ 디렉토리 내의 info, version 파일에 접근한 프로그램과 사용자에 대한 정보이며, 커널은 버튼을 클릭한 시점까지의 접근 정보를 전달합니다.

커널 모듈은 위의 파일들에 대한 접근이 발생한 경우에만 정보를 생성하여 관리하고, 버튼이 클릭되어 에이전트로 전달된 정보는 커널이 관리하는 접근 정보 리스트에서 삭제됩니다.

즉 버튼이 클릭된 시점 사이에 파일에 접근한 정보만 커널에서 유지되고, 전달한 시점에는 리스트에서 제거되니, 정보가 존재하지 않는다고 출력되면 접근한 다음 다시 확인하시기 바랍니다.

관련 내용은 user/agent_data.cc, kernel/netlink*.c와 kernel/access_list.c 파일을 참조하세요.


지금까지 샘플 프로젝트의 기능들을 살펴봤습니다.

물론 샘플이기 때문에 간단한 모양새를 띄고 있지만, 개발에 있어 꽤나 유용한 정보들을 보기 쉽게 구성했습니다. 특히 개방형OS 관련 개발 실력을 키우는데 많은 도움이 될 수 있도록 공개 SW를 개발 시 자주 쓰이는 기술들을 적용해 놓았으니 많은 도움 되셨으면 좋겠습니다.

궁금한 점이 있으시다면 댓글이나 메일(markany-linux@markany.com)으로 언제든 보내주세요!

※ 알려진 문제점

openCode 릴리즈 버전 기준 메인 디렉토리에서 make로 빌드를 시도할 시 커널 모듈이 정상적으로 빌드 되지 않는 문제가 있습니다. 추후 2차 릴리즈를 통해 문제를 해결할 예정입니다.

관련기사 더보기

개인정보 유출 사례, 미리 알고 똑똑하게 대비하자!
2단계 인증 해제하면 절대 안되는 두 가지 이유
지식 블로그 리스트 보기