t-kernel-zh team mailing list archive
-
t-kernel-zh team
-
Mailing list archive
-
Message #00006
[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