이때까지 개발하면서 느낀점이나 내부 기능의 정리 및 회고입니다.
출처)
http://blog.naver.com/dowkim10/120124163384
----------------------------------------------
한달 반 동안 갤럭시 튜너를 개발하면서 상당히 즐거운 시간을 보냈다.
초반에는 자바나 안드로이드 프로그래밍을 몰라서 이 부분에 대해 시간투자가 많았지만, 후반부에는 익숙해져서 인지 편하게 작업한 것 같다.
사실 기능적으로 복잡하고, 일반 어플에서 보지 못하는 특수한 기능들이 많아서 신기하게 생각하실 분들도 많을 것으로 생각된다.
하지만, 내용적으로는 사실 간단한 내용이고 시간을 많이 투자 한것도 아니다. (평균 하루에 2-3시간)
각 커뮤니티에서 댓글들을 보면, 아직 이 어플에 대한 이해와 사용법및 오해의 요소들이 많은것 같다.
제일 눈의 띄는것은 사람들이 루팅과 패치에 대해 구분하지 못한다는 것이다.
갤럭시 튜너는 루팅된 폰에서 동작하는 것이지 특정 환경을 요구하는 것이 아니다.
예를 들면 테그라크등을 설치해야 한다는등, 부두를 설치해야 한다는등의 얘기는 자주 볼 수 있었다.
사실, 갤럭시 튜너는 루팅 어플(루트 익스플로어, 테마 스토어등)중의 한가지 일 뿐이다.
갤럭시 튜너의 모든 메뉴에서 나오는 값들은 현재 시스템의 값을 보여주는 것이지 권장값이나 변경된 값을 보여주는 것이 아니다.
그리고, Apply를 누르지 않는 이상 어떠한 값도 바꾸지 않는다. 즉, 아무런 작업도 하지 않는다.
그리고, 특정 기능을 사용한다고 해서 CPU 로드나 배터리 사용이 증가 하는것도 없다. 이는, 모든 설정들을 한번의 변경으로 이루어지고, 백그라운드에서 계속 수행하는 구조가 아니기 때문이다.
일례로 특정 기능을 적용하고, 어플 자체를 Kill하고 심지어 갤럭시 튜너를 지워도 그 기능은 유지되어 있기 때문이다.
(약간의 예외사항으로는 touch gesture는 터치 Up,Down에 대해 해석하는 루틴이 추가 되긴 했지만, 배터리 사용증가는 거의 없다고 봐도 된다.)
갤럭시 튜너의 다음 항목들은 커널 모듈로 만들어져 있다.
(LCD color, Sound, Over clock, Key map, Touch gesture)
아직 본인도 루팅어플중에 모듈을 사용하는 것은 보지 못한것 같다.
커널 모듈은 실행중에 커널에 삽입이 되어 커널의 모든 기능을 변경할 수 있는 막강한 방법이다.
즉, 모든 디바이스를 제어하고 설정을 변경하고 커널의 핵심 기능까지 변경이 가능하다.
단지, 기능이 막강한 대신 커널 코드에 대한 이해가 필요하고 세심한 주의가 요구된다.
(커널 모듈은 휘발성이라서 런타임에 동적으로 커널에 삽입되거나 제거될수 있다. 하지만 껏다 키면 모듈기능은 다 날라간다)
기술적 내용은 아래 사이트에서 있으나 한동안 업데이트 하지 않았다. 기회가 되면 내용을 보충할듯
http://blog.naver.com/dowkim10/120121423774
세부적 내용 1 (커널 모듈사용)
1. LCD color
이 부분은 좀 아쉬움이 많이 남는다. RGB 레벨이나 채도등도 변경해 보고 싶지만 문서가 없는것이 아쉽다.
기본적으로 커널코드의 내용으로는 원하는 기능을 구현할수 없었다.
framebuffer쪽에서 color나 Hue값이 지원되지 않았고, mdnie나 tl2796쪽에서 변경해야 하는데 양쪽다 문서가 없다.
삼성 모바일에 아는 사람도 없고, 그쪽하고는 관련이 없어서 이 부분은 그냥 이대로 둬야 할듯.
(본인은 직업적으로 안드로이드를 하지는 않고 취미로만 한다.)
2. Sound
사람들이 제일 많이 애용하는것 같다. 이 부분도 문서는 없지만, 커널 코드에 대체적으로 유추할 수 있는 부분이 많아서 간단한 것만 구현하였다.
현재도 추가할 수 있는 내용은 많은데, 추가하면 부두쪽과 충돌이 있어서 부두나 갤럭시 튜너 둘중 하나를 유저가 선택해야 한다.
아무래도, 부두쪽에서 EQ, 3D쪽 추가하면 그때나 기능추가를 좀 더 해야겠다.
3. Over clock
제일 논란이 많은 기능이다. 첨부터 지금까지 제한(5분, 5회사용)을 풀어 달라고 요구를 끊임없이 한다.
그냥 아예 오버클럭 기능자체를 빼 버릴까 고민을 한번씩 한다. (사실 몇시간 만에 만든거라 미련도 없다.)
이 부분에 대한 제한을 풀 가능성은 거의 없다고 봐야 한다. 차라리 기능 자체를 빼버리는쪽을 선택할 듯
4. Key map 및 touch gesture
이 부분은 리눅스 커널의 input layer 및 갤럭시의 keypad 드라이버, touch 드라이버, jack 드라이버등을 참조했다.
커널 레벨에서 다룬것이라서 안드로이드 프레임워크에서는 변경된 사항에 대해서 모른다.
즉, 아주 저수준에서 key input을 발생시킨 것이다.
touch gesture는 만들면서도 좀 재미가 있었는데, 원래의 touch 드라이버에다 input handle과 input handler를 달아서 좌표를 훅킹한 방법을 사용했다.
여기서 넘어온 좌표를 해석하여 touch gesture를 만든 것이다.
이러한 방법은 user 레벨에서 다루는 것에 비해서 오버헤드가 아주 작아서, cpu 로드를 거의 차지하지 않고 강력한 방법이다.
단지, 커널 코드를 모르면 구현하기는 좀 힘들듯.
세부적 내용 2 (기타)
1. IO 스케쥴러
사실 이 부분은 이전에 있던 단일 프로그램을 갤럭시 튜너에 포함시킨 내용이다.
효과로 보면, 개인적인 생각으로 크지 않다고 본다.
즉, deadline이나 CFQ 어떤쪽을 선택해도 크게 나쁘거나 좋아지는것은 아닌것으로 보인다.
2. Memory Manager
먼저 vm쪽은 /proc/sys/vm 디렉토리에 있는 몇몇 파일들의 값을 보여주거나 바꿀수 있는 인터페이스를 제공했다.
여기서 제공하는 6개도 그중 일부이다.
이 부분은 사실 리눅스 커뮤니티 사이에서도 논란이 많은 부분이고 시스템별 최적의 값을 찾는것도 어렵다.
(사실 본인도 어떤 내용인지는 알지만 아직 어느값이 내 폰에 맞을지 모른다.)
minfree(어플리 케이션 캐시, oom_kill)쪽도 삼성에서 제공하는 값 자체가 어찌보면 최적일듯 하다.
사실 메모리 메니저 부분도 내용을 알고 적절한 선택을 해주면 좀 더 나은 환경을 제공해 줄 수 있다.
하지만, 내용도 모르고 임의의 값을 설정하는것은 더 않좋다.
3. Orientation Fix
간단한 원리로 구현된 것이다. Orientation Fix를 클릭하면 그냥 가속도 센서를 disable시킨다.
restore를 클릭하면 센서를 enable 시킨다.
커널 코드를 보니 센서에 대해서 IOCTL을 허용하게 해 놓아서, 쉽게 구현한듯.
4. Firmware(kernel writing)
커널을 odin없이 폰에서 직접 변경할 수 있어서 편리해 하는것 같다.
세부적인 기술적 내용은 아래에서
http://blog.naver.com/dowkim10/120121116733
5. Using with Unrooted (루팅없이 사용하기)
이 부분에 대한 오해가 좀 있는 것 같다.
갤럭시 튜너는 루트 권한에서만 동작한다. 따라서 루팅이 반드시 필요하다.
루팅 권한을 주는 것은 루팅했을때 설치된 "su"에 의해서 가능한 것이다.
하지만 루팅을 하게되면 금융권 어플을 사용하지 못하는 단점이 있다.
편의를 위해서 루팅을 해제해도 갤럭시 튜너를 동작시킬시 있도록 su를 대체하는 다른 파일을 설치하고, 따른 형태로 루트권한을 얻게 하도록 한것이다.
따라서, 처음 사용시에는 여전히 루팅이 되어 있어야 한다.