All posts by RSR

Chromebook Kernel upgrade

samsung-srs5_chrome-white-cover-lg

크롬북에 데비안 7 wheezy를 올려서 쓰다가 업데이트 하는바람에 패키지가 다 꼬였다 .. ㅠ
그래서 그냥 다 밀고 jessie로 올리려니 커널이 너무 old 하댄다 (기존 3.4.0)
전에 3.4.0도 직접 패키징한건데 작성한 자료가 없어서 멘땅에 헤딩하면서 작성하였다.  결론은 성공

1. 필요패키지 설치

apt-get install git-core  kernel-package

2. git checkout
git clone https://chromium.googlesource.com/chromiumos/third_party/kernel
cd kernel/
git checkout origin/chromeos-3.18

3. 설정
# First we patch “base.config“ to set “CONFIG_SECURITY_CHROMIUMOS“
# to “n“ …
cp ./chromeos/config/base.config ./chromeos/config/base.config.orig
sed -e \
‘s/CONFIG_SECURITY_CHROMIUMOS=y/CONFIG_SECURITY_CHROMIUMOS=n/’ \
./chromeos/config/base.config.orig > ./chromeos/config/base.config
./chromeos/scripts/prepareconfig chromeos-intel-pineview
yes “” | make oldconfig

4. 컴파일
make-kpkg kernel_image kernel_headers

5. 패키지 설치
dpkg -i /usr/src/linux-*.deb

6. 기존커널에서 커널 config 추출
vbutil_kernel –verify /dev/sda1 –verbose | tail -1 > ./config.txt
# Add “disablevmx=off“ to the command line, so that VMX is enabled (for VirtualBox & Co)
sed -e ‘s/$/ disablevmx=off/’ ./config.txt > /config-new.txt
순정 크롬 OS에(devchannel 45.0.2427)서 추출된건
console= loglevel=7 init=/sbin/init cros_secure oops=panic panic=-1 root=/dev/dm-0 rootwait ro dm_verity.error_behavior=3 dm_verity.max_bios=-1 dm_verity.dev_wait=1 dm=”1 vroot none ro 1,0 2506752 verity payload=PARTUUID=%U/PARTNROFF=1 hashtree=PARTUUID=%U/PARTNROFF=1 hashstart=2506752 alg=sha1 root_hexdigest=451ba0633d93141f977a5a71e92b2230ea6c4643 salt=e24daa025524c9239fc31a253100c2ac5cd9e095bf82f7d021e78763a14b81e0″ noinitrd vt.global_cursor_default=0 kern_guid=%U add_efi_memmap boot=local noresume noswap i915.modeset=1 tpm_tis.force=1 tpm_tis.interrupts=0 nmi_watchdog=panic,lapic iTCO_vendor_support.vendorsupport=3
인데 커널부팅 실패
어디선가 굴러먹던
quiet loglevel=0 console=tty2 init=/sbin/init add_efi_memmap boot=local noresume noswap i915.modeset=1 cros_secure tpm_tis.force=1 tpm_tis.interrupts=0 nmi_watchdog=panic,lapic disablevmx=off root=PARTUUID=%U/PARTNROFF=1 rootwait rw noinitrd vt.global_cursor_default=0 kern_guid=%U
이걸로는 부팅 성공, 분석은 귀찮아서..

7. 부트스텁 생성
git clone https://chromium.googlesource.com/chromiumos/third_party/bootstub
trampoline.S 파일의 /* Disable paging. */ 아래 세블럭 주석처리
make  하면 에러나는데 Makefile의 PREFIX 에서 /usr/bin/x86_64-pc-linux-gnu- 를 /usr/bin/x86_64-linux-gnu- 로 변경 후 ㄱㄱ

8. 커널 패킹
vbutil_kernel –pack ./newkernel –keyblock /usr/share/vboot/devkeys/kernel.keyblock \
–version 1 –signprivate /usr/share/vboot/devkeys/kernel_data_key.vbprivk \
–config=./config-new.txt –vmlinuz /boot/vmlinuz-3.18.0 \
–arch x86_64 –bootloader ./bootstub.efi

9. 커널 덮어쓰기
dd if=./newkernel of=/dev/sda1

끝!

참고 : http://www.chromebook-linux.com/2011/11/compiling-your-custom-kernel-on.html
http://unix.stackexchange.com/questions/75565/i-need-a-step-by-step-guide-to-build-kernel-modules-in-chrubuntu

스크린샷 - 2015년 06월 16일 - 23시 19분 16초

Dell U2412M과 EDID

EDID(Extended display identification data)란 모니터랑 그래픽카드와 통신하는 데이터이다.
일반적으로 I²C를 사용하며 VGA나 DVI, HDMI 케이블을 통해서 128바이트(1.x버전)나 256바이트(2.0버전)의 데이터가 오가는데
http://en.wikipedia.org/wiki/Extended_display_identification_data#EDID_1.3_data_format 여기 잘 나와있다.

올초에 메인으로 쓰던 Dell U2412M를 사용하던중
[ 2.801934] [drm:drm_edid_block_valid] *ERROR* EDID checksum is invalid, remainder is 127
[ 2.801970] Raw EDID:
[ 2.801993] 7f ff ff ff ff ff ff 00 10 ac 7a a0 XX XX XX XX(SEREAL)
[ 2.802021] 1c 16 01 03 80 34 20 78 ea ee 95 a3 54 4c 99 26
[ 2.802049] 0f 50 54 a1 08 00 81 40 81 80 a9 40 b3 00 d1 c0
[ 2.802077] 01 01 01 01 01 01 28 3c 80 a0 70 b0 23 40 30 20
[ 2.802105] 36 00 06 44 21 00 00 1a 00 00 00 ff 00 47 48 4e
[ 2.802133] 33 52 32 37 42 33 45 35 4c 0a 00 00 00 fc 00 44
[ 2.802161] 45 4c 4c 20 55 32 34 31 32 4d 0a 20 00 00 00 fd
[ 2.802189] 00 32 3d 1e 53 11 00 0a 20 20 20 20 20 20 00 4a
이런 커널메시지가 날 반기며 모니터 출력이 정상적으로 되지 않았다.

위키를 보면 첫 8바이트는 “00 FF FF FF FF FF FF 00 ” 로 고정이나 커널은 첫바이트를 7F로 받으면서 에러를 내주었다.
물론 해상도데이터가 전혀없으므로 강제로 해상도를 잡아주기전까진 화면역시 나오지 않았다.
(편법으로 잘되는 모니터로 부팅후 바꿔치기 방법도 있었다.)

웹서핑을 하다가EDID를 PC에서 수정할 수 있는 방법을 찾았는데
PowerStrip을 이용하거나(추천) 리눅스 커맨드라인 프로그램이 있었는데(까먹음 -_-a)
내 피시에서는 지원되지 않았다.(HD3000….읽는거만…)

결국 귀찮아서 AS신청 하였다.(무려5년!)
1:1 교체였는데 불량화소 가득하고 빛샘현상이 가득해 보드만 냠냠 (1:1교체 ….)

어떤 이유로 EDID가 앞 1바이트만 바꼈는지도 모르겠으며 앞으로도 바뀔일이 없겠지…..
덕분에 EDID에 대해 공부할 수 있는 좋은 기회가 되었다. (이런기회는 없었으면….)

http://www.hardwarebook.info/VGA_(VESA_DDC)
http://en.wikipedia.org/wiki/Extended_display_identification_data
http://iambongsu.com/275

edid.tar.gz

LINUX 두개의 클립보드

최근 복사 붙여넣기를 하는도중 뭔가 자꾸 동기화가 안되는 느낌을 강하게 받았다.
이는 굉장히 거슬렸고 나를 짜증나게 만들었다.

이유를 찾았다.
역사상 이유로 리눅스에는 두개의 클립보드(selections)가 존재한다.

X11에서 사용하는 PRIMARY와 (Drag / Mouse mid button )
현대Gtk/Gnome or Qt/KDE에서 사용하는 CLIPBOARD (Control + c / Control + v)

두개가 아직 공존하는 이유는 CLIPBOARD-only 어플리케이션과 PRIMARY-only 어플리케이션의 공유가 어렵다는점.
(아직도 CLIPBOARD를 지원안해주는 어플리케이션이 있으면… 망한거아닌가;)

이 둘을 동기화, 관리 해주는 클립보드 매니저 툴들이 있다
Autocutsel, XFCE Clipmap, Gnome Glipper, KDE KlipperParcellite
(난 cliplt 쓰는데 parcellite랑 차이점을 모르겠음;)(은 Clipit is a fork of Parcellite라네)

이걸 써도 불편한건 사실 ( use primary에 synchronize 까지 걸면 그냥 드래그 하는데로 클립보드 들어가버림, 내가 원하는건 드래그는 클립보드 안넣었으면 좋겠는데..)

저질 같은 이런 현상을 확인하는 방법은
1. 웹페이지에서 한 단어를 Control+c로 복사한다(CLIPBOARD)
2. 다른내용까지 쭉 드래그만 한다.(PRIMARY)
3. terminator에 Shift + Insert 또는 마우스 휠을 누른다(PRIMARY)
4. terminator에 Ctrl+Shift+Insert 또는 Ctrl+Shift+v 를 한다(CLIPBOARD)

모든 문제를 해결하는방법은
Shift + Insert에 익숙한 습관을 Ctrl + Shift + Insert로 고치면 된다.(그냥 xmodmap으로 커스텀할까..)

http://unix.stackexchange.com/questions/77545/cut-copy-paste-in-linux-puppy-wary/77566#77566
http://unix.stackexchange.com/questions/82311/how-to-make-shiftinsert-paste-selection-after-closing-window-with-selection/82326#82326 (이글에서는 3개라고 주장함;)
http://en.wikipedia.org/wiki/X_Window_selection

NFC로 관리되는 도서 대여시스템 취약점

EAS(Electronic article surveillance)란 도난방지 장치 및 감지장치를 의미함.
http://en.wikipedia.org/wiki/Electronic_article_surveillance

많은 공공 도서관과 대학도서관에서 EAS를 위해 RFID를 사용중임
http://nicom.ibx.kr/bbs/board.php?bo_table=portfolio_x

호기심에 안드로이드의 TagInfo 어플로 해당태그를 스캔했더니
도서정보를 확인할 수 있었음.
taginfo

이 RFID 들은 NXP Icode SLI SL2 ICS20 제품이 사용됨.
http://www.nxp.com/documents/data_sheet/SL058030.pdf

데이터시트를 보니 EAS 라는 항목이 존재하고 이를 Set과 Reset 을 시킬수있는 프로토콜이 존재함.  (데이터시트 17p)
또한 이 플래그를 제어는 아무나 가능함.

간단한 안드로이드 어플리캐이션을 제작하여 테스트해봄
read unset
정상적으로 빌려온 도서이기에 EAS는 해제되어있음 (게이트 통과시 경보x)

이 도서에 Set 버튼을 통해 EAS 를 세팅
EAS Wirte
그후 태그 스캔시
read set
EAS가 세팅되어있음.

실제 화정 글샘도서관에서 실무자에게 양해를 구한뒤 실제환경에서 테스트를 모두 마치고 해당 내용 전달함. (14/03/04 11시경)

테스트한 태그는 모두 나인콤과 이씨오에서 정부에 조달한 제품으로 모두 간단히 본 어플에 태그함으로써 EAS비트를 조작할 수 있었음.
http://www.eco.co.kr/
http://nicom.ibx.kr/

NFC 지원 안드로이드폰은 현재 널리 보급되어있어서 EAS를 조작하는 어플리캐이션이 공개될 경우 도서관 뿐만 아니라 해당 태그를 사용하여 도난 방지하는 곳은 모두 무력하게 되므로써 이 시스템을 믿고 있었다간 큰 피해를 입을 가능성이 있음.

또한 회원카드 역시 동일한 태그를 사용하며 ISO/IEC 15693 (NfcV) 에 정의된 프로토콜을 사용함으로써 태그의 내용을 읽고 수정할 수 있으며 회원번호를 변조하여 타인명의로 대출할 수 있음.

해결방안 : 문제 발생전 태그 전량교체 외 해결방법이 없는 것으로 사려됨

 

ps. 도서관협의회에서 기 발표된 자료임.
http://www.kapul.or.kr/apload/userfiles/files/2014%20%EB%8B%A8%EA%B5%AD%EB%8C%80/%EC%A0%9C16%EC%B0%A8%20%EB%8F%84%EC%84%9C%EA%B4%80%EC%9E%A5%20%ED%9A%8C%EC%9D%98/ECO%20%EB%B0%9C%ED%91%9C%EC%9E%90%EB%A3%8C.pptx