안드로이드 폰에 리눅스 돌리기..
on
안드로이드 폰에 리눅스를 올리는 것은 내가 여러 번 해본 끝에 내린 결론으로는
- 하드웨어가 좋긴 하지만 그것을 대놓고 리눅스 전용으로 쓸 수가 없다. 많이 가 봐야 chroot로 리눅스를 굴리는 것이지만, 그렇다고 시스템의 device를 모두 linux에서 불러다 쓸 수도 없다.
- docker를 굴린다거나 그 안에서 또 다른 가상 머신을 글린다거나 하는 일은 쉽지 않다. 커널을 패치해야 되고 등등 골치아픈 일이 있다.
- 내장 카메라를 motion 같은 걸 써서 굴리는 것도 안된다. device에 잡혀는 있는데 사용을 할 수가 없단다.
성능은 분명히 라스베리파이보다 좋지만 자유도가 떨어진다는 게 문제다. 차라리 디스플레이를 안 써도 좋으니 라스베리파이처럼 headless로 부트만 할 수 있어도 좋겠는데, 그건 또 거의 풀커스텀으로 커널/부트로더 작업을 해주어야하니 진정 안드로이드폰의 전문가가 아니면 어렵다. 사실 안드로이드 폰을 차라리 리눅스 전용으로 만들어버릴 수 있다면 좋은데, 그런 소프트웨어도 돌아다니지가 않고 그런 경우도 못 봤다.
그럼 어쩌라고? 응 그냥 chroot로 linux를 굴리는 일, 가끔씩 잔심부름 시키는 일 등등을 할 수 있다. Systemd가 안 뜨니까 수동으로 뭐든 띄워야 되는데, 사실 그것도 여의치가 않은 게 dbus라든가 유닉스 소켓을 특정 폴더에 열어주어야 되는 것 등등 각각의 서비스들이 원하는 게 참 많다.
owntone 같은 걸 써서 뮤직서버를 굴려보려고 했는데 마찬가지로 dbus를 쓰는 avahi-daemon이 못 도와주겠다고 나선다. 미친다 정말.
arm 계열에서 그나마 빠른 미니보드를 구할 수 있는 것은 잘해야 snapdragon인데 개발 보드라 가격이 매우 비싸고 mini PC 계열에서 찾으면 제법 발열이 있는 인텔 프로세서가 박힌 것이어야 한다. Rockchip의 RK3588 정도면 그래도 나름 중저가의 안드로이드 폰 정도의 속도는 나온다.
결론은..
- 안드로이드 폰에 맞는 좋은 리눅스 커널이 나오면 할 수 있지만, 그런 게 없어서 어쩔 수 없이 벤더가 제공하는 안드로이드 커널에서 리눅스를 굴려야 함.
- 불행히도 그 커널도 native한 linux 설치가 불가하기 때문에 어쩔 수 없이 안드로이드 위에서 chroot로 구동해야 함. 많은 기능들이 제약됨. 특히나 systemd로 service를 굴리는 시스템은.
- 그렇지 않은 시스템이라고 하더라도 dbus라든가 /sys folder 등등에서 원하지 않는 응답이 나올 수 있고 그래서 제대로 서비스가 돌지 않을 확률이 높다.
- 여러가지 훌륭한 내장 디바이스들 (카메라, GPS 등등)을 리눅스 측에서는 제대로 활용할 수가 없다.
리눅스의 많은 좋은 기능들은 그냥 희생하고 들어가야 한다. 그래도 하드웨어 가성비가 그 정도로 좋은 SBC를 구할 수 없다.