私はFCFSスケジューリングアルゴリズムの平均待ち時間を計算するシステムコールを行っています。Linuxカーネル2.6.39.4をコンパイル中にエラーが発生しました
このガイドの後、私は関連ファイルを変更してこのプログラムを作成しました。 カーネルのコンパイル中に、このエラーが表示されます。
CC arch/x86/lib/strstr_32.o
AS arch/x86/lib/thunk_32.o
CC arch/x86/lib/usercopy_32.o
AR arch/x86/lib/lib.a
LD vmlinux.o
MODPOST vmlinux.o
WARNING: modpost: Found 31 section mismatch(es).
To see
full details build your kernel with:
'make CONFIG_DEBUG_SECTION_MISMATCH=y'
GEN .version
CHK include/generated/compile.h
UPD include/generated/compile.h
CC init/version.o
LD init/built-in.o
LD .tmp_vmlinux1
kernel/built-in.o: In function `sys_atvfcfs':
(.text+0x3e27e): undefined reference to `__floatsisf'
kernel/built-in.o: In function `sys_atvfcfs':
(.text+0x3e286): undefined reference to `__fixsfsi'
make: *** [.tmp_vmlinux1] Error 1
アンこれは私のプログラム
#include <linux/linkage.h>
asmlinkage long sys_atvfcfs(int at[], int bt[], int n)
{
int i=0;
int j,t,wt[n],sum,q;
float avgwt;
for(j=i+1;j<n;j++)
{
if(at[i]>at[j])
{
t=at[i];
at[i]=at[j];
at[j]=t;
q=bt[i];
bt[i]=bt[j];
bt[j]=q;
}
}
wt[0]=0;
sum=0;
for(i=0;i<n-1;i++)
{
wt[i+1]=wt[i]+bt[i];
sum=sum+(wt[i+1]-at[i]);
}
avgwt=sum/n;
return avgwt;
}
で問題がどこにあるか誰もが説明できますか?
最初にkernel_fpu_begin()を追加し、プログラムの最後にkernel_fpu_end()を追加すると、私のシステムコールが機能します – user1263375
@ user1263375 - あなたはカーネル設定を微調整して終了する必要があるでしょう'-mhard-float'を実行するか、エミュレーションをオンにします。 [このブログの記事](http://www.linuxsmiths.com/blog/?p=253)(私のものではない)は細部まで非常にうまく走っています:) –