본문 바로가기

리눅스 커널/기타

(11)
리눅스 프린터 사용하기 1. cups 설치 #apt install cups cups-client 2. cups 데몬 실행 #service cups restart 3. printer관련 애플리케이션 실행 ##메뉴에서 찾아보면 보통 있다. 프린터가 잘 연결되어 있다면 아래와 같이 바로 잡힌다. 4. 우하단 Forward -> Apply 까지 하면 등록이 완료됨 5. 이 후 lp 명령어를 이용하여 프린터 할 파일을 출력 기타. 웹 브라우저를 이용하여 프린터는 안되는 듯, 웹 브라우저에서 localhost:631 로 접속
정적, 동적 라이브러리 만들기 [1. static library] $gcc -c test.c #test.c의 오브젝트 파일 생성 $ar rc libtest.a test.o #Archive파일 생성, 두번째 인자는 반드시 lib"~~".a 의 형태로 해야한다. 사용 시에는 컴파일 옵션에 라이브러리 사용을 알려야함 $gcc main.c -L"라이브러리 경로" -ltest -L을 통해 라이브러리 경로를 알리고, -l을 통해서 사용할 라이브러리를 명시하는데, 리눅스는 /lib, /usr/lib, /usr/local/lib 에서 라이브러리를 찾기 때문이다. [2. dynamic library] $gcc -c test.c #test.c의 오브젝트 파일 생성 $gcc -shared -o libtest.so test.o #Shared Library..
아파치, php, mariadb 설치 1. #apt-get install apache2 2. #apt-get install php 3. #apt-get install mariadb-server mariadb-client //instead of mysql-server, mysql-client 4. #wget https://files.phpmyadmin.net/phpMyAdmin/4.8.3/phpMyAdmin-4.8.3-all-languages.zip phpmyadmin login issue, mysql> CREATE USER ‘id’@’localhost’ IDENTIFIED BY ‘password’; mysql> GRANT ALL PRIVILEGES ON *.* TO ‘id’@’localhost’ WITH GRANT OPTION; mysql>..
Linux latop touchpad on/off 노트북 핫키가 잘 안되서 정리하는 글이다. 먼저 xinput 프로그램을 설치한다. $xinput 을 하면 장치 이름과 아이디가 뜨는데 여기서 중요한 것은 id이다. #!/bin/bash ret=$(xinput | grep Touchpad) #exec command back=${ret#*id=} id=${back%%[*} $(xinput --set-prop $id "Device Enabled" 1) #1: on, 0: off echo touchpad on ret=$(command)는 괄호안에 명령어 실행 후 결과를 ret에 저장하는 코드이다. back=${ret#*id=}는 ret에 시작위치부터 'id=' 로 끝나는 모든 문자열을 제거한다. id=${back%%[*} 는 back에 끝에서부터 '['로 시작..
kali linux unlock session 노트북에서 칼리 리눅스 사용 시, 노트북을 덮었다가 열면 화면이 보이지 않는 문제가 있었다. 여기서 ctrl + alt + f1 을 눌러 tty1을 열 수 있고, tty2를 누르면 tty2를 열 수 있고, ... 이렇게 되는데, 어찌 되었는 gui 형식으로 사용 할 수 없었다. 이 경우에는 ctrl + alt + f7 후 ctrl + alt + f8 을 하게 되면, 로그인 창 이 뜨게 되므로, 로그인 해서 사용하면 된다.
dmesg console output 커널 모듈을 작성하고 동작을 확인하기 위해 printk를 자주 사용하는데, 한가지 불편한 점은 모듈을 돌리고 dmesg를 입력해야 한다는 것이다. 보통 프로그램 처럼 콘솔에 바로바로 출력하는 것이 제한되기 때문에 이렇게 하는데 아래와 같은 방법으로 비슷하게 흉내는 낼 수 있다. 먼저 터미널을 하나 새로 열고 아래의 명령어를 입력한다. dmesg -wH printk가 실행되면 새로 연 터미널에서 커널 로그가 찍히는 것을 확인 할 수 있다. https://stackoverflow.com/questions/27903915/how-can-i-show-printk-message-in-konsole https://cpuu.postype.com/post/55291
칼리 리눅스 커널 컴파일 시 에러에 관해 make menuconfig 후 make 해주면 이상한 에러가 발생 /boot/config-$(uname -r) 를 복사해서 .config 파일을 만들고 make menuconfig 없이 make를 진행함 이후 나오는 메시지를 전부 y로 처리함. https://docs.kali.org/development/recompiling-the-kali-linux-kernel https://www.cyberciti.biz/tips/compiling-linux-kernel-26.html
Kernel wait queue #include #include #include #include #include #include #include #include static struct task_struct * ts = NULL; static DECLARE_WAIT_QUEUE_HEAD(wq); //static wait_queue_head_t wq; static int cond; static int ts_routine(void * ptr) { unsigned long remain; //allow_signal(SIGUSR1); while (1) { //remain = msleep_interruptible(5000); cond = 0; remain = wait_event_interruptible_timeout(wq, cond == 1, 5 ..
Kernel thread & signal #include #include #include #include #include #include #include static struct task_struct * ts = NULL; static int ts_routine(void * ptr) { unsigned long remain; allow_signal(SIGUSR1); while (1) { remain = msleep_interruptible(5000); //signal을 기다리면서 ms동안 sleep if (kthread_should_stop()) //쓰레드 종료 요청을 받는 함수 break; printk("wake up, remain time: %lums\n", remain); } printk("remain time: %lums\n", rema..
Device file 해당 글은 아래 사이트를 참조하여 개인적으로 공부한 바를 정리한 글이다. https://sysplay.in/blog/linux-kernel-internals/2015/10/waiting-blocking-in-linux-driver/ 리눅스 커널에서 프로세스를 관리하는 자료구조는 task_struct이며, state라는 멤버를 통해 현재 해당 태스크의 상태정보를 알 수 있다. /* Used in tsk->state: */ #define TASK_RUNNING0 //run 큐 내에 있거나, 실행중 인 상태. #define TASK_INTERRUPTIBLE1 //이벤트를 기다리는 상태, 시그널에 의해 wake up 될 수 있다. #define TASK_UNINTERRUPTIBLE2 //역시 이벤트를 기다리나,..