いくつかのLinuxカーネルをコンパイルしようとすると、これが起こり、どういうわけか次のメッセージが表示されます。
.../kernel-source/scripts/mkmakefile: line 5: $'\r': command not found
これは、ファイルに通常のファイルではなくDOS-EOLが含まれているためです。通常、これらの問題のあるファイルにパッチを適用できますが、dos2unix
この場合、mkmakefile
ファイルは別のスクリプト(Yocto Linuxフレームワークを使用しますが、Androidのビルドプロセスでは同じ問題がある)によって作成されました。
igncr
CygWinにはbashオプションがありますが、Linux bashにはないことがわかります。
\r
bashに文字(\r\n
等しい文字など)を無視するように指示する方法/オプションはありますか\n
?
編集:shebangと最初の実行可能行の間の最初の空白行(コメント間の空白行)でエラーが発生します。
Yoctoログ(実際には、ザイリンクスのYoctoベースのフレームワークであるPetalinux)は、次のことを示しています。
DEBUG: Executing python function sysroot_cleansstate
DEBUG: Python function sysroot_cleansstate finished
DEBUG: Executing python function check_oldest_kernel
DEBUG: Python function check_oldest_kernel finished
DEBUG: Executing shell function do_configure
NOTE: make HOSTCC=gcc HOSTCPP=gcc -E -C .../project/build/tmp/work-shared/plnx_arm/kernel-source O=.../project/build/tmp/work/plnx_arm-xilinx-linux-gnueabi/linux-xlnx/4.9-xilinx-v2017.4+gitAUTOINC+b450e900fd-r0/linux-plnx_arm-standard-build oldnoconfig
NOTE: make HOSTCC=gcc HOSTCPP=gcc -E -C .../project/build/tmp/work-shared/plnx_arm/kernel-source O=.../project/build/tmp/work/plnx_arm-xilinx-linux-gnueabi/linux-xlnx/4.9-xilinx-v2017.4+gitAUTOINC+b450e900fd-r0/linux-plnx_arm-standard-build oldconfig
ERROR: oe_runmake failed
make: Entering directory '.../project/build/tmp/work-shared/plnx_arm/kernel-source'
make[1]: Entering directory '.../project/build/tmp/work/plnx_arm-xilinx-linux-gnueabi/linux-xlnx/4.9-xilinx-v2017.4+gitAUTOINC+b450e900fd-r0/linux-plnx_arm-standard-build'
.../project/build/tmp/work-shared/plnx_arm/kernel-source/scripts/mkmakefile: line 5: $'\r': command not found
.../project/build/tmp/work-shared/plnx_arm/kernel-source/scripts/mkmakefile: line 11: $'\r': command not found
.../project/build/tmp/work-shared/plnx_arm/kernel-source/scripts/mkmakefile: line 12: $'\r': command not found
.../project/build/tmp/work-shared/plnx_arm/kernel-source/scripts/mkmakefile: line 52: warning: here-document at line 24 delimited by end-of-file (wanted `EOF')
.../project/build/tmp/work-shared/plnx_arm/kernel-source/scripts/mkmakefile: line 53: syntax error: unexpected end of file
make[1]: *** [.../project/build/tmp/work-shared/plnx_arm/kernel-source/Makefile:461: outputmakefile] Error 2
make[1]: Leaving directory '.../project/build/tmp/work/plnx_arm-xilinx-linux-gnueabi/linux-xlnx/4.9-xilinx-v2017.4+gitAUTOINC+b450e900fd-r0/linux-plnx_arm-standard-build'
make: *** [Makefile:150: sub-make] Error 2
EOF
行53は改行文字のない単一のトークンです(cat << EOF > Makefile
from
生成されたスクリプトの最後の行は、予想されたものとEOF^M
一致しないようですEOF
(\r
/なし^M
)。
答え1
いいえ、bashに文字を無視するように指示する方法/オプションはありません\r
(つまり、\r\n
同等\n
)。
ファイルはファイルの終わりの1つとしてファイルシステムに保存することができ、bashはこれに問題はありません。
答え2
問題の原因は、ビルドプロセス内でgitを使用したために発生したようです。 Linuxでは、autocrlf
次のように設定されていることを確認してくださいinput
。
git config --global core.autocrlf input
その後、ビルドはうまく動作します。