前言:
使用linux系统或虚拟机进行嵌入式linux开发是常规方法;
使用MSYS是用于尝鲜和研究。
由于windows和linux的差异,使用MSYS代替Linux虚拟机会遇到很多坑。
主要原因在于:
1. windows和linux文件系统的差异:win不区分文件名大小写, linux要区分
2. 路径分隔符的差异: win使用"\"分隔路径, linux使用"/"分隔路径
3. 可执行文件的差异:win执行文件后缀名*.exe,linux可执行文件不需要后缀名
成果:
目前MSYS环境已经成功用于编译linux应用层软件,linux内核, U-Boot等。
踩坑1:传递编译参数-Wl,--dynamic-linker=/lib/ld-linux.so,编译后结果路径是错的!
原因:MSYS调用mingw的gcc.exe传递路径参数时,会转换为windows文件路径。
解决:MSYS工具链不要和mingw混用;路径使用双斜杠//开头也能凑合使用。
踩坑2:编译设备树失败: No rule to make target 'arch/arm/boot/dts/*.dtb', needed by '__build'.
原因:Makefile生成dtb需要调用dtc,而windows下面dtc编译出来是dtc.exe,文件名不一致。
解决:把dtc.exe改名为dtc
踩坑3:创建软链接行为异常,导致一些编译脚本报错
原因:ln -s创建软链接其行为竟然是复制文件/文件夹.
解决:添加环境变量:export MSYS="winsymlinks:lnk"
持续更新...