← Back to team overview

t-kernel-zh team mailing list archive

[T-Kernel] T-Kernel 使用 mktksvc 生成系统调用汇编程序

 

在 T-Kernel 里面的系统调用,有一些是使用 perl 自动生成的,而且生成的
是 GNU 格式的汇编语言。Open T-Kernel 需要支持不同编译器,这部分就需要
进行改动。
先试着执行一下:

 $ cd etkernel_source
 $ ./etc/mktksvc
 -bash: ./etc/mktksvc: /usr/local/bin/perl: bad interpreter: No such file or directory

这个提示表明找不到 perl,那么可以确定一下系统有没有装 perl,如果没有
的话,就安装一个。
现在我的机器是有安装 perl,但仍然出现这个提示,可以先看一下脚本的内容

 $ head -5 etc/mktksvc     
 #! /usr/local/bin/perl
 #
 # ----------------------------------------------------------------------
 #     T-Kernel 2.0 Software Package
 #

再查看一下本机的 perl 安装路径:

 $which perl
 /usr/bin/perl

发现,脚本写的路径与本机不同,解决的方法可以修改脚本,也可以使用 perl
直接执行。

 $ perl etc/mktksvc
 $./etc/mktksvc 
 usage: mktksvc cpu infile

其实研究过之后,这个 cpu 是一个输出的目录,而 infile 是一个头文件,而
且里面有标志:

 $vi include/tk/syscall.h +617

/* [BEGIN SYSCALLS] */


 $vi include/tk/syscall.h +753

/* [END SYSCALLS] */

而且这个脚本执行需要在特定的路径,经试验之后发现:

 $ cd lib/libsvc/src
 $../../../etc/mktksvc em1d ../../../include/tk/syscall.h

生成的文件位于当前目录下的 sysdepend/${cpu}/ 下面,可以尝试

 $ mkdir sysdepend/sta1095
 $ ../../../etc/mktksvc sta1095 ../../../include/tk/syscall.h     
 can not open sysdepend/sta1095/tk_cre_tsk.S
 
 
 $ ../../../etc/mktksvc em1d ../../../include/tk/syscall.h 
 $ ../../../etc/mktksvc sta1095 ../../../include/tk/syscall.h                                                                                                 
 can not open sysdepend/sta1095/tk_cre_tsk.S
 $ mkdir sysdepend/sta1095
 $ ../../../etc/mktksvc sta1095 ../../../include/tk/syscall.h 
 Can't locate ../build/sta1095/makeiftk.pl in @INC (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.22.1 /usr/local/share/perl/5.22.1 /usr/lib/x86_64-linux-gnu/perl5/5.22 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.22 /usr/share/perl/5.22 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base .) at ../../../etc/mktksvc line 200.
 $ mkdir ../build/sta1095
 $ cp ../build/em1d/*.pl ../build/sta1095/
 $ # 这个脚本在这里可以看到还依赖于上面的 .pl 文件
 $ # 现在再执行这个脚本
 $ ../../../etc/mktksvc sta1095 ../../../include/tk/syscall.h
 $ ls sysdepend/sta1095/
 tk_acp_por.S    tk_cre_mbf.S  tk_del_flg.S  tk_dly_tsk_u.S  tk_get_mpl_u.S  tk_ras_tex.S    tk_ref_mtx.S    tk_rpl_rdv.S    tk_snd_mbf.S    tk_wai_flg_u.S
 tk_acp_por_u.S  tk_cre_mbx.S  tk_del_mbf.S  tk_ena_dsp.S    tk_get_otm.S    tk_rcv_mbf.S    tk_ref_por.S    tk_rsm_tsk.S    tk_snd_mbf_u.S  tk_wai_sem.S
 tk_cal_por.S    tk_cre_mpf.S  tk_del_mbx.S  tk_ena_tex.S    tk_get_otm_u.S  tk_rcv_mbf_u.S  tk_ref_sem.S    tk_set_cpr.S    tk_snd_mbx.S    tk_wai_sem_u.S
 tk_cal_por_u.S  tk_cre_mpl.S  tk_del_mpf.S  tk_ena_wai.S    tk_get_reg.S    tk_rcv_mbx.S    tk_ref_ssy.S    tk_set_flg.S    tk_sta_alm.S    tk_wai_tev.S
 tk_can_wup.S    tk_cre_mtx.S  tk_del_mpl.S  tk_end_tex.S    tk_get_res.S    tk_rcv_mbx_u.S  tk_ref_sys.S    tk_set_pow.S    tk_sta_alm_u.S  tk_wai_tev_u.S
 tk_chg_pri.S    tk_cre_por.S  tk_del_mtx.S  tk_evt_ssy.S    tk_get_rid.S    tk_ref_alm.S    tk_ref_tex.S    tk_set_reg.S    tk_sta_cyc.S    tk_wup_tsk.S
 tk_chg_slt.S    tk_cre_res.S  tk_del_por.S  tk_exd_tsk.S    tk_get_tid.S    tk_ref_alm_u.S  tk_ref_tsk.S    tk_set_rid.S    tk_sta_ssy.S
 tk_chg_slt_u.S  tk_cre_sem.S  tk_del_res.S  tk_ext_tsk.S    tk_get_tim.S    tk_ref_cyc.S    tk_ref_tsk_u.S  tk_set_tim.S    tk_sta_tsk.S
 tk_cln_ssy.S    tk_cre_tsk.S  tk_del_sem.S  tk_frsm_tsk.S   tk_get_tim_u.S  tk_ref_cyc_u.S  tk_ref_ver.S    tk_set_tim_u.S  tk_stp_alm.S
 tk_clr_flg.S    tk_def_int.S  tk_del_tsk.S  tk_fwd_por.S    tk_get_tsp.S    tk_ref_flg.S    tk_rel_mpf.S    tk_set_tsp.S    tk_stp_cyc.S
 tk_cre_alm.S    tk_def_ssy.S  tk_dis_dsp.S  tk_get_cpr.S    tk_inf_tsk.S    tk_ref_mbf.S    tk_rel_mpl.S    tk_sig_sem.S    tk_sus_tsk.S
 tk_cre_cyc.S    tk_def_tex.S  tk_dis_tex.S  tk_get_mpf.S    tk_inf_tsk_u.S  tk_ref_mbx.S    tk_rel_wai.S    tk_sig_tev.S    tk_ter_tsk.S
 tk_cre_cyc_u.S  tk_del_alm.S  tk_dis_wai.S  tk_get_mpf_u.S  tk_loc_mtx.S    tk_ref_mpf.S    tk_ret_int.S    tk_slp_tsk.S    tk_unl_mtx.S
 tk_cre_flg.S    tk_del_cyc.S  tk_dly_tsk.S  tk_get_mpl.S    tk_loc_mtx_u.S  tk_ref_mpl.S    tk_rot_rdq.S    tk_slp_tsk_u.S  tk_wai_flg.S
 $

下一步,需要把这些内容移植到 KBuild 里面去,主要有两方面的工作:
 1. 脚本修改或者重写之后集成到 KBuild 里
 2. 对不同编译器生成不同的汇编代码

-- 

...
duhuanpeng.
u74147@gmai1.com


[keyword]

T-Kernel perl makeifex.pl makeiftk.pl makeifdrv.pl makeiftd.pl
mergesrec mkdrvsvc mkiflib mktdsvc mktksvc



Follow ups