vmware-modconfig on linux kernel 4.6 or above

최근 커널버전을 업데이트후 vmware 실행시 modconfig가 잘안되서 찾아봄
아래는 해당 에러로그

Virtual machine monitor랑 Virtual ethernet모듈이 컴파일중 오류나는것으로 확인
찾아보니 kernel 4.6이후부터 호출 인자가 좀 바꼈나봄
/usr/lib/vmware/modules/source여기에 커널모듈 소스들이 존재함
가서 tar로 vmmon이랑 vmnet을 잘 풀고 ..

를 적용시켜주고 다시 잘 묶은뒤
vmware-modconfig –console –install-all
뙇!

잘된다

http://rglinuxtech.com/?p=1679#comment-16518

Amlogic S905 Set-top box T95N M8S 2G/8G

최근에 리눅스 머신 구매를 고려하던중 ODROID C2 와 같은 MCU인 Amlogic S905를 사용한 셑탑박스를 구매 하였다 (http://www.aliexpress.com/item/New-T95N-Mini-M8S-Pro-m8spro-Android-5-1-TV-Box-S905-Quad-Core-Bluetooth-Wifi/32670305568.html?spm=2114.13010608.0.97.YhH49H 무려 35$)
배송은 알리를 통해 1주일 걸렸고 상세 스펙은 다음과 같다.

CPU: Amlogic S905 quad-core cortex-A53 frequency 2.0G
GPU: Mali-450 5-Core GPU
RAM: 2GB DDR3
ROM: 8GB eMMC Flash 5.0 (Read 80MB/s above, Write 20MB/s above)
OS: Android 5.1
KODI: 16.0 Pre-installed and Play Well
Support 4kx2k H.265 Hardware Video Decode and 4Kx2K Output
Bluetooth 4.0
Ethernet: 10/100M,  RJ-45

더 저렴한 제품(RAM 1G)이나 좀더 비싼제품 (Giga Ethernet)이 있었지만 그냥 대충 싼게….
ODROID C2와 비교했을때
C2는 아답터, EMMC, 리모컨, HDMI케이블, 케이스 별매 지만
(각 6,600, 21,600원, 4,800원, 4,400원 , 5,400원 VAT별도, tot :4만5천 정도)
USB 슬롯 4개, Gigabit ethernet, 좀더 거대한 방열판, GPOI 포트와 커뮤니티의 지원이 비교적(?) 활발한 장점을 가지고 있다(하지만 가격이 깡패다 C2살 돈이면 셋탑 두개사고 국밥한그릇 먹을수 있다)

e480721d87b0270bee2950924e7f735b

1

받아보니 크기가 생각외로 매우 작았다.
어댑터가 EU 플러그라 그런지 조금 많이 헐겁다. 쓰기 굉장히 불안하게 생겼다 (왠지 쓰다보면 폭발할듯)
다행인지 USB포트를 통해 전원공급이 가능하였다(USB A male to USB A male 케이블 쓰면 된다)
더불어 샤오미 보조배터리 하나면 ODROID에서 6만원에 파는 UPS3을 대신할수있다. 가격도 싸고 용량도 크다

UART

켜보지도 않고 분해를 진행하였으며 목표했던 UART 단자를 찾았다(친절하게 프린팅 감사)

5f6206a15a5b11d863f0dd97e3814415cb7244b6c6cf70ccc9e9b2ed565589de

UART를 찍어보면 아래와 같은 로그가 나온다 (115200bd, 안드로이드 부팅로그 제외)

부팅 도중 키입력을 하게되면 u-boot 쉘로 빠지게 된다.

u-boot이  bootcmd 커맨드를 자동으로 실행되어 storeboot을 실행하게 되고 여기서 bootargs 를 설정하고, dtb를 읽고, 커널 읽고 bootm 을 통해 android를 부팅하는것을  확인할 수 있다.

안드로이드 부팅하면 root쉘이 자동으로 떠있다.
EMMC가 mmcblk0 으로 잡혀있고 mSD가 mmcblk1로 잡힌다
혹시 모를 상황에 대비해 전체 덤프 뜨고 c2용 armbian을 올렸….는데 부팅이 안된다. AHHHHH

Recovery / Debrick

인터넷 뒤적뒤적하니
http://forum.androidgadget.co.uk/showthread.php?tid=139
http://freaktab.com/forum/tv-player-support/amlogic-based-tv-players/s802/eny-acemax-ott/20156-help-ott-m8-bad-flash-recovery-using-shorted-nand-pins
이런 저런 신공으로 NAND에 호작질하여 복구한 것을 발견했는데….. 내가 구매한건 보드 레이아웃이 완전 다르다…….
데이터 시트를 보니 RCY가 0이 아니고, 2가 아닌경우 또는 모든 부팅 디바이스가 감지되지 않으면  USB Boot 으로 빠진다.4아마 NAND 쇼트 시키는거도 NAND 감지 못하게해서 USB Boot으로 빠지게 하는것으로 추정하고 eMMC 죽일 각오하고(데이터 시트에 따르면, 어차피 죽어도 SD 카드로는 부팅가능ㅋ) eMMC 주변의 핀들을 쇼트 시켰더니 컴퓨터에 idVendor=1b8e, idProduct=c003로 인식되었다.

tsopKakaoTalk_20160710_205008262NC랑 IO부분이랑 쇼트하면서 전원넣으면 된다.  (사진은 180도 돌아가있다, NC는 Not Connected 인데 이상하게 GND에 연결되어있다) 불꽃놀이 이스터에그 보고싶으면 Vcc, Vss 쇼트하면 된다
정상적인 입출력을 방해해서 NAND 또는 eMMC 통신을 막는것으로 추정된다

이후 윈도우에서 AMLOGIC_TOOL_setup_v2.0.5.15로 원본 펌웨어 플래싱하면된다
아래는 셀러를 통해 받은 오리지널 펌웨어 (AML BURN IMAGE 형식인듯?)
https://mega.nz/#F!5gMHBSyZ!MklQLG9LSnRzu8f5T9rqBw

이제 맘껏 죽여도 된다 (BL0을 건들수 있을진 모르겠지만 BL0 건들면 이방법도 답없을듯..)

ARMBIAN

이번엔 armbian을 eMMC가 아닌 SD카드에 구웠다. (dd명령어 이용)
두개의 파티션이 존재하며 파티션의 시작은 1049kB부터이다

1번째 파티션에 부팅관련 이미지들, 2번째 파티션에는 Rootfs가 존재한다
이를 u-boot을 통해 부팅시키기 위해서 u-boot shell 에 접근하여 아래와 같이 타이핑(복붙안됨 아니 되는데 setenv 따로 fatload 따로 booti 따로 해줘야된다, 귀찮..)

우왕ㅋ 부팅 잘됨 ㅋ굳

이걸 영구히 eMMC에 넣어줄려니까 자꾸 BOOT 쪽이 깨져서 플래싱하는 경우가 생긴다
확인해보니 eMMC의 경우 파티션 영역이 부트영역에 저장되어있다 GPT, MBR 이런게 아니라 MPT(MMC Partition Table)라고

관련 코드는 AML u-boot source의 include/emmc_partitions.h, drivers/mmc/emmc_partitions.c 에 존재한다
적당히 저부분 수정 샥샥 해주고 부팅하니까 적용은 되는데 SPL 영역의 데이터와 다르다면서 다음 부팅에서는 다시 복원해버린다 -_-;
MPT부분 싹 날리고 부팅하니…… 안된다 부팅이 ….. u-boot 진입은 되는데 아예 파티션을 못찾는듯(SPL에서 복구하면 되잖아?)

U-boot Compile

linux-3.14-buildroot-pkg-201605-release-v1.2.pdf 9페이지 보면 툴체인 잘 구성하라고 나와있다

CodeSourcery.tar.gz
gnutools.tar.gz
gcc-linaro-aarch64-none-elf-4.8-2013.11_linux. tar

잘 받아서 잘 구성해주자.
$ tar zxf CodeSourcery.tar.gz -C /opt
$ tar zxf gnutools.tar.gz -C /opt
$ tar xf gcc-linaro-aarch64-none-elf-4.8-2013.11_linux.tar -C /opt
$ export PATH=$PATH: /opt/gnutools/arc2.3-p0/elf32-4.2.1/bin: /opt/CodeSourcery/Sourcery_G++_Lite/bin:/opt/CodeSourcery/Sourcery_G+ +_Lite/arm-none-eabi/bin:/opt/CodeSourcery/Sourcery_G+ +_Lite/arm-none-linux-gnueabi/bin:/opt/gcc-linaro-aarch64-none-elf-4.8-2013.11_li nux/bin/

u-boot 소스는 여기 uboot-2016-05-04-1fdf4683a5.tar.gz
make gxb_p200_v1_config 해주면 컴파일 잘된다.
잘 안되면 arch/arm/cpu/armv8/gxb/firmware/scp_task/Makefile 부터는 크로스 컴파일러를 CodeSourcery에 있는 컴파일러를 사용하게 지정해주면 된다.
mmcblk0에 fip/gxb/u-boot.bin을 올려주고 reboot을 하면 나의 uboot으로 부팅이 된다.

근데 여기서 다시 재부팅하면……….. 부팅이 안된다.

low task start! 찍고 멈춰버린다. 로그를 보면 bl30이 제대로 올라가지 않은것으로 확인된다.(안올렸다!)

부트로더가지고 이것저것 하는거 지쳐서 그냥 microSD 카드에 OS넣고 부팅하기로 하였다.
uboot에서 아래의 명령어를 입력하면 microSD카드로 자동부팅하게된다

 

근데 부팅할때마다 MAC이 바뀐다…

 


번외
bl2  Trusted Boot Firmware BL2
bl30  SCP Firmware BL3-0
bl301  SCP Firmware BL3-0-1
bl31  EL3 Runtime Firmware BL3-1
bl32  Secure Payload BL3-2 (Trusted OS)
bl33  Non-Trusted Firmware BL3-3

 

 


작성중 (업데이트 될거야 언젠간)

커널 모듈만 컴파일 하는 방법

Ways to compile kernel modules

커널 소스 디렉터리에서 아래 커맨드 진행 ( ecryptfs만 컴파일 하는경우)

또는 모듈디렉터리로 이동 후

알면 쉽고 모르면 어렵다…

 

ARM Secure Boot Procedure

용어 정리
TBB – Trusted Board Boot
CoT – Chain of trust
iROM – Internal ROM
BL – Boot Loader
OM – Operation Mode
iSRAM – Internal SRAM

1

리셋
시스템이 리셋되면 iROM부터 PC가 시작된다
iROM에는 BL0을 수행하는 코드가 들어있어 OM Pin으로부터 부팅매체를 찾아 해당 디바이스로부터 BL1을 iSRAM으로  읽어들인다. 읽어들이는 과정에서 Secure Boot가 활성화 되어있으면 BL1의 무결성을 검사하고  BL1으로 제어권을 넘기게 된다.
BL0은 칩 제조사가 생산시점에서 기록하게되며 삼성 휴대폰의 경우 삼성 반도체가 역할을 맡는다(추정)

제어권을 넘겨받은 BL1은 BL2를 로딩하는데 역시 Secure Boot 활성 여부에 따라 무결성을 체크하고 BL2로 제어권을 넘겨준다
BL1은 2차벤더가 기록하게되며 삼성 휴대폰의 경우삼성 모바일 사업부, ODROID의 경우 HARDKERNEL에서 책임을 담당한다(강한 추정)

BL2는 일반적으로 u-boot이나 BLOB, grub 과 같은 널리 알려진 Boot Loader가 사용된다. (주로 u-boot)
ODROID의 경우 BL1에서 BL2의 무결성 검사를 진행하지 않아 사용자가 BL2을 변경할수 있다
삼성의경우 BL2의 무결성 검사에 실패하면 Knox를 trip 시켜 보안서비스 동작을 막는것으로 확인된다.

2Boot Loader를 검증하는데에 RAS 서명이 사용되며 무결성 검사에 실패하면 CPU는 멈추게 된다.

대부분의 경우 BL1이 문제가 되며 (…) 자세하고 정확한 내용은 CPU의 USER Manual 을 참고해야 한다(그런데 구할길이 NDA 밖에 없다…)

참고
https://github.com/ARM-software/arm-trusted-firmware/blob/master/docs/firmware-design.md
https://github.com/ARM-software/arm-trusted-firmware/blob/master/docs/trusted-board-boot.md
https://github.com/limingth/ARM-Resources/blob/master/tiny210/Datasheet/S5PV210_UM_REV1.1.pdf
http://prog3.com/sbdm/blog/yueqian_scut/article/details/38983607
http://prog3.com/sbdm/blog/yueqian_scut/article/details/39004727
http://eoworld.tistory.com/entry/mango210-%EB%B6%80%ED%8C%85-%EA%B3%BC%EC%A0%95
http://chlrbgh0.tistory.com/entry/2-%EC%9E%84%EB%B2%A0%EB%94%94%EB%93%9C-%EB%A6%AC%EB%88%85%EC%8A%A4-%EC%8B%9C%EC%9E%91%EC%9D%80-Bootloader%EB%A7%90%EA%B3%A0-%EA%B5%AC%EC%A1%B0-%ED%8C%8C%EC%95%85%EB%B6%80%ED%84%B0
http://blog.naver.com/dong880510/140162794298

ps. 중국어 배우고싶다
XDA 보니까 이런게 있다 (http://forum.xda-developers.com/showthread.php?t=1233273)

WordPress oEmbed 제거 / 비활성

4.4 업데이트 이후로 링크 붙여넣을때마다 성가신놈들이 자꾸 생겨났는데 빡친김에 제거,
wp-includes/class-oembed.php
파일에 55번라인  public function __construct() {
뒤에  return;  생성

더이상 안생긴다.
아니 이런 호불호 기능 넣을거면 좀 비활성화 옵션을 만들어주던가….
작동도 안되는 disable 플러그인 딸랑 하나 만들어주고 끝이라니 어휴 …

4.6업데이트 이후 더 성가신놈들이 나타났다…..
wp-settings.php 에서
190번 라인쯤
require( ABSPATH . WPINC . ‘/embed.php’ );
require( ABSPATH . WPINC . ‘/class-wp-embed.php’ );
require( ABSPATH . WPINC . ‘/class-wp-oembed-controller.php’ );
얘들 주석처리하면 싹 사라진다

Universal Flash Storage / Embedded MultiMediaCard

Universal Flash Storage
S6, S6 edge가 최초의 UFS2.0 폰임 (근데 iPhone6보다 느림)
http://www.anandtech.com/show/9146/the-samsung-galaxy-s6-and-s6-edge-review/7

UFS 는 USB와 같이 직렬통신으로 고속을 구현함
반면 eMMC는 병렬통신을 사용함으로써 속도향상에 무리가있음
SCSI 아키텍쳐 모델을 사용함, 커맨드 큐잉 가능
읽기쓰기명령이 동시에 가능, emmc에 비해 저전력(피크치는 높으나 빨리 처리하고 Idle 타버림)
아직은 비교적 고가

eMMC 5.0 – 400MB/s
UFS 2.0 – 720MB/s(HS-G2x2LANE) (사타 3.0보다 빠름!)

http://www.slideshare.net/BhaumikBhatt4/universal-flash-storage

 

Embedded MultiMediaCard
그냥 칩형태의 SD카드(MMC)라 생각하면 이해가 빠를거같다
MicroSD나 SecureDigital에 핀만 맞춰주면 리더기로 바로 읽힌다
고가의 eMMC 리더기 보면 저항 몇개랑 캐패시터가 전부이다
CMD, GND, VDD, CLK, DAT0 5가닥만 연결되어도 읽어진다(but 느려)

http://blog.skhynix.com/1312
http://www.androidpolice.com/2015/02/26/samsung-electronics-starts-mass-producing-industrys-first-128gb-universal-flash-storage-almost-certainly-galaxy-s6-bound/
http://www.androidpolice.com/2015/03/05/galaxy-s6-storage-benchmarks-show-it-blowing-all-past-phones-out-of-the-water/

linux 디스크 입출력 속도 확인 캐시 드랍

dd if=something of=somewhere bs=4K/1M/2M/4M count=testsize oflag=dsync

 

  • To free pagecache:
  • To free dentries and inodes:
  • To free pagecache, dentries and inodes:

     

 

 

http://unix.stackexchange.com/questions/87908/how-do-you-empty-the-buffers-and-cache-on-a-linux-system

https://romanrm.net/dd-benchmark

https://www.thomas-krenn.com/en/wiki/Linux_I/O_Performance_Tests_using_dd

Parts List

2016-06-18
Arduino nano x3 (2.5$)
STM8003F3P6 x2 (2.5$)
433Mhz RF transmitter 1 pair (2pcs) (0.8$)
HC-11 433MHz wireless RF serial UART module  x2 (4$)
NRF24L01 NRF24L01+ Wireless Module 2.4G x2 (1$)
MPU-6050 Module 3 Axis x2 (2$)
ST-link v2 x1 (6$)
ATMEL ISP x2 (1.5$)
DC2DC 12V to 5v 3A x1 (1.7$)
433MHz 315MHz Wireless ASK RF  – STX882 1set (4$)
Logic Analyze 24M 8CH, MCU  x1 (6$)
PN532 NFC RFID Module x2 (12$)
RTL2832U+R820T TV Tuner x1 (8$)
GY-86 x1 (13$)
HM-10 BLE Bluetooth 4.0 x1 (3.3$)
ESP8266 ESP12-E x1 (1.8$)
NRF905 x1 (3$)
12V relay kit x1 (3$)
SG90 servo motor x2 (2$)

STM8S

DM00024550_STM8S003F3_Datasheet

PM0044_STM8 CPU programming manualpd

RM0016_STM8S_STM8A_Reference manual

리눅스에서 sdccstm8flash로 개발 가능

High-Quality-Mini-Board-STM8S003F3P6-Development-Board-Program-Module-With-Download-Serial-Port-Pin

알리에서 싸다고 몇개 구매했는데…. 지금 생각해보니 저렴하지 않은듯.. (2.5$)
회로도를 구하지 못했다.. J2를 쇼트시키면 PA3에 LED가 연결되어 있다

짜깁기 하여 IRQ로 UART 처리하는 코드

 

TIM1_CH3에 PWM 출력샘플 (아 이거하느라고 되게 애먹었는데..  OISR에서 or 연산이 제대로 안되서 그랬던거같다….)

 

사용한 Makefile

이왕 환경구성한거 몇개 더샀다
저렴하다(0.78$) 크리스탈이 없다(내부클럭 쓰나?…)
HTB11CtFMFXXXXadXFXXq6xXFXXXf
http://www.aliexpress.com/item/1pcs-lot-STM8S103F3P6-system-board-STM8S-STM8-development-board-minimum-core-board/32524292414.html