smbd 실행 시 Out of Memory 또는 실행이 되더라도 정상적으로 동작하지 않을때, 디버깅 및 실행에 관련된 사항을

확인하기 위하여, smbd 를 foreground 및 stdout 옵션을 주어 실행되는 내용을 확인한다.

 

$ smbd -F -S --debuglevel 3

 

위와 같은 메세지가 출력되는 것을 확인 할 수 있으며, 아래와 같이 top 으로 확인 시 메모리가 계속해서 누수가 발생하여, 결국 Out of Memory 로 인해 커널에서 프로세스가 죽게된다.

이런 경우, 위의 Debug 메세지와 같이 iconv 에서 변환하려는 과정에서 Memory Leak 이 연속적으로 발생하게 되고,

메모리 한계치에 도달하게 되면 위와 같이 프로세스가 강제로 죽게된다.

 

이 문제점을 해결하기 위해 /etc/samba/smb.conf 에서 아래의 옵션을 추가하여 iconv 함수 내에서 memory leak을 우회하여, samba가 정상적으로 동작 할 수 있도록 설정하여 막을 수 있다.

 

dos charset = UTF-8
display charset = UTF-8

 

위의 옵션을 추가하여 재실행을 하거나, cp850.so 파일을 생성하여 해결이 가능하지만, utf-8 로 손쉽게 처리가 가능하다.

포팅된 touchscreen을 TSLIB에서 사용하기 위해서, ts_test 등의 tslib를 사용 할 때,

나타나는 현상


/dev/input/event0로에서 'cat /dev/input/event0 | hexdump' 를 통해 정상적 이벤트가 발생됨을 확인을 전제


TSLIB 환경변수 및 ts.conf 또한 정상적으로 세팅 되어있을때,


동작하지 않을경우에는 커널버전 과 TSLIB Protocol 버전 또는


evbit 등의 세팅이 맞지 않을경우이다.


최신의 TSLIB는 뜨지 않으며, 낮은버전을 사용할 경우 발생 하게 되는데

patch work를 통해 확인한 결과는 아래와 같다.


 static int check_fd(struct tslib_input *i)
 {
 	struct tsdev *ts = i->module.dev;
 	int version;
-	u_int32_t bit;
-	u_int64_t absbit;
+	long evbit[BITS_TO_LONGS(EV_CNT)];
+	long absbit[BITS_TO_LONGS(ABS_CNT)];
+	long keybit[BITS_TO_LONGS(KEY_CNT)];
 
-	if (! ((ioctl(ts->fd, EVIOCGVERSION, &version) >= 0) &&
-		(version == EV_VERSION) &&
-		(ioctl(ts->fd, EVIOCGBIT(0, sizeof(bit) * 8), &bit) >= 0) &&
-		(bit & (1 << EV_ABS)) &&
-		(ioctl(ts->fd, EVIOCGBIT(EV_ABS, sizeof(absbit) * 8), &absbit) >= 0) &&
-		(absbit & (1 << ABS_X)) &&
-		(absbit & (1 << ABS_Y)) && (absbit & (1 << ABS_PRESSURE)))) {
-		fprintf(stderr, "selected device is not a touchscreen I understand\n");
+	if (ioctl(ts->fd, EVIOCGVERSION, &version) < 0) {
+		fprintf(stderr, "tslib: Selected device is not a Linux input event device\n");
 		return -1;
 	}
 


위와 같이 input-raw.c 에서 EV_VERSION과 ,evbit과 absbit 등을 ioctl로 확인 후에 touch driver로 인식한다.

이 과정에서 맞지 않을 경우 비정상 종료가 이루어져 driver가 제대로 호출되지 않게 된다.


그에 따라 input driver의 bit세팅값 또는 EV_VERSION을 확인해야 한다.


단적인 예로


낮은버전은 0x010000이여야만 가능하다.


TSLIB가 높은 경우 + 코드와 같이 버전과 관계없이 실행된다.

File - "<kernel home>/include/linux/input.h"

-- #define EV_VERSION              0x010000

++ #define EV_VERSION              0x010001

이외의 상황이라면,

driver의 문제 또는 ts.conf의 값을 변경해야함

크로스 컴파일 실행파일 no such file or directory 문제




크로스 컴파일 하여 타겟 보드에 넣었을 때 실행되지 않고,

no such file or directory 가 출력되는 경우에 해결하는 방법입니다.


실행시 no such file or directory가 출력되는 실행파일을 file 명령어를 통해

Shared Library를 확인 합니다.


file 해당파일

ex)

test: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.16, not stripped


file 명령어를 실행하면 그 파일의 ELF 정보 및 사용하는 공유 라이브러리 정보가 나옵니다.


실행파일에서 사용하는 공유라이브러리가 /lib 혹은 /etc/ld.so.conf 파일에 저장되어 있는 경로에 있는지 확인 합니다.


없을 경우에는 타겟보드에 저장된 올바른 라이브러리 파일을 생성하거나 심볼릭 링크를 통해 생성 합니다.



ex) ld-linux.so.3 파일이 없어서 나타나는 경우


/lib 디렉토리내에 ld-linux.so.3가 없어 나타나는 경우에는 대게 arm 라이브러리 중 ld-linux-armhf.so.3가 있습니다.


ld-linux.so.3는 프로그램이 메모리에 적재되는 시점에서 실행에 필요한 라이브러리를 링킹해주는 파일입니다.


이 링킹은 target platform인 Arm 에서는 ld-linux-armhf.so.3가 담당합니다. 그에 따라 복사 또는 파일명 변경이 아닌 심볼릭 링크를 걸어주어야 합니다.



sudo ln -s /lib/ld-linux-armhf.so.3 /lib/ld-linux.so.3


정상적으로 파일을 생성 혹은 링크했다면, 재실행 시 문제되지 않고 정상 실행이 될 것 입니다.

HDMI Hot Plug Detect Pin and +5V Pin


  HDMI 의 Pin 및 Pin map에는 Hot Plug Detect(HPD) 핀이 존재 합니다.

이 핀의 목적은 송신부(PC or 셋탑박스 등의 영상 전송 장치)에서 출력 장치인 디스플레이 장치가 접속이 되었는지 감지하는 핀입니다.

이 핀은 수신부가 출력을 내고, 송신부가 수신하는 형태로 동작을 합니다. 인터럽트 핸들링과 유사 혹은 같습니다.


  그러나, 수신측의 HPD Pin은 송신측의 +5V 출력에 풀업이 되어 있어 송신측에도 영향을 받습니다. 규격에서는 송신측에서 +2.0V 이상이면 인식을 하며, 수신측 출력은 +2.4V 이상이여야 합니다. 또한 송신측 +5V는 +4.7이상 유지해야 합니다.



[레벨쉬프트가 들어간 HDMI Tx/Rx 예제]


위의 그림과 같이 송신측 +5V와 수신측 HPD가 풀업 저항으로 연결되어 있습니다.


  문제 발생하는 경우로는, 송신측 +5V가 약할 경우 송신측에서 수신측을 인식하지 못하는 경우가 발생합니다. 이 문제는 수신측이 HPD을 제어하기 때문입니다. 송신측 +5V의 전압이 낮을 경우 수신측에서 송신측을 인식하지 못하는 사태가 발생하고, 그에 따라 수신측은 HPD를 Low 상태로 유지 합니다. 그렇게 될 경우에는 송신측은 출력을 내보내지 않습니다.


  위와 같은 현상이 발생되면, 출력 장치에 따라 출력이 되고 안되고 하는 현상이 발생하기도 합니다.

따라서, 디버깅 및 동작 확인 시 등의 경우에 HPD가 작동하여 DDC를 통해 송수신측이 서로 EDID Data를 주고 받는지, 그 후에 송신측에서 받은 EDID 데이터를 통해 정상적인 Signal이 나오는지에 대한 확인이 필요합니다.

 

  HDMI의 동작 순서에 따라 확인하면, 어떠한 부분에서 문제점이 발생하는지 알 수 있습니다.







참고 : http://wellplay.tistory.com/



+ Recent posts