LS1043A ubuntu file system - chroot: failed to run command ‘/bin/bash’: Exec format error
http://cafe.naver.com/embeddedcrazyboys
http://www.mangoboard.com/
LS1043A ubuntu file system chroot
참고로 저는 우분투 14.04를 사용하고 있고,
LSDK 1706 버전의 파일시스템이 우분투 16.04이기 때문에
docker를 이용해서 빌드하는 방법을 사용하고 있습니다.
build/images로 이동해서 ubuntu_xenial_arm64_rootfs.d 폴더를 모두 삭제 합니다.
yhoh:~/wk-cleverlogic-LayerscapeSDK/flexbuild$ source setup.env
yhoh:~/wk-cleverlogic-LayerscapeSDK/flexbuild$ flex-builder docker
root@fbubuntu:~# source setup.env
root@fbubuntu:~# flex-builder -i mkrfs -a arm64 -B additional_packages_list_minimal
위 명령을 수행하고 나면 ubuntu_xenial_arm64_rootfs.d 폴더가 생성되고
파일시스템이 정상적으로 만들어 집니다.
root@fbubuntu:~# flex-builder -i merge-component -a arm64
INSTRUCTION: merge-component
DESTARCH: arm64
cp: error reading 'build/images/components_arm64/usr/local/odp/ls2088/bin/odp_kni_demo': Input/output error
merge-component 수행시 위와 같이 에러 메시지가 뜹니다.
vi로 build/images/components_arm64/usr/local/odp/ls2088/bin/odp_kni_demo를 한번 읽었다가
다시 merge-component를 수행하면 문제가 없는 경우도 있는데
왜 이런 에러가 발생하는지 모르겠습니다.
이것이 첫번째 질문입니다.
어쨌든 위 과정을 모두 수행한 후에 아래와 같이 chroot를 수행합니다.
yhoh:~/wk-cleverlogic-LayerscapeSDK/flexbuild$ sudo chroot build/images/ubuntu_xenial_arm64_rootfs.d
root@yhoh-System-Product-Name:/#
apt-get update 등 모든 우분투의 설치 명령을 수행하면 정상적으로 동작이 됩니다.
그런데 문제는 PC를 리부트 한 상태에서 다시 작업을 수행하려고 하면
아래와 같이 에러가 발생합니다.
yhoh:~/wk-cleverlogic-LayerscapeSDK/flexbuild$ sudo chroot build/images/ubuntu_xenial_arm64_rootfs.d
chroot: failed to run command ‘/bin/bash’: Exec format error
제가 여러번 위의 작업을 수행했는데 매번 동일한 현상입니다.
컴퓨터를 리부트 한 후에 시험을 해봐주시기 바랍니다.
최초 이미지를 만들고나서 할때는 문제가 안되는데
컴퓨터를 리부트 한 후에 하면 문제가 발생합니다.
yhoh:~/wk-cleverlogic-LayerscapeSDK/flexbuild$ flex-builder docker
[sudo] password for yhoh:
yhoh_fbubuntu_1.0
root@fbubuntu:~# source setup.env
root@fbubuntu:~# pwd
/home/yhoh/wk-cleverlogic-LayerscapeSDK/flexbuild
root@fbubuntu:~# chroot build/images/ubuntu_xenial_arm64_rootfs.d/
chroot: failed to run command '/bin/sh': Exec format error
저는 리눅스서버로 PC를 하나 두고 쓰고 있어서 재부팅을 하지 않기 때문에 이 문제를 겪어본적이 없었습니다.
서버를 재부팅 해보니 저도 같은 증상이 나와서 원인을 파악해 보니 docker에서 arm64에 맞는 바이너리를 실행할 수 없는 문제인 것을 찾아냈습니다.
아래와 같이 하면 해결됩니다.
flex-builder docker로 들어간 다음에 target root filesystem의 /usr/bin에 qemu-aarch64-static을 카피해 줍니다. (한번만 해 주면 됩니다.)
root@fbubuntu:~# cp /usr/bin/qemu-aarch64-static build/images/ubuntu_xenial_arm64_rootfs.d/usr/binqemu의 aarch64를 enable해 줍니다.
root@fbubuntu:~# update-binfmts --enable qemu-aarch64chroot로 root filesystem을 진입합니다.
root@fbubuntu:~# chroot build/images/ubuntu_xenial_arm64_rootfs.d/
- qemu-aarch64-static이 한번 카피되어 들어가 있었다면 그 이후로는 위의 2번 3번만 해 주면 됩니다.
제가 참고한 문건은 아래와 같습니다.