6.2.2 Xenomai3:创建实时线程第一弹之改头换面pthread_create

点击查看《Xenomai/IPIPE源代码情景解析》
原创不易,需要大家多多鼓励!您的关注、点赞、收藏就是我的创作动力!

6.2.2 Xenomai3:创建实时线程第一弹之改头换面pthread_create

按照《6.2.1 Xenomai3: hello world演示线程创建》演示的例子,“helloworld”线程是由pthread_create创建的。pthread_create 是 POSIX 线程(pthread)库中的一个函数,用于创建一个新的线程。

使用gdb ./hello进行调试,执行break 56在第56行设置断点。执行run开始运行,在第56行中断。

在这里插入图片描述
执行break pthread_create,在pthread库的pthread_create.c中第625行即pthread_create函数设置中断断点。
执行c,触发中断。
执行bt命令,得到当前的函数执行堆栈。
在这里插入图片描述
在hello.c的第56行,原先是直接调用libpthread库的pthread_create函数,但是从堆栈信息来看,反而改头换面,调用了libcobalt库的__wrap_pthread_create函数。这是如何做到的?
从《6.2.1 Xenomai3: hello world演示线程创建》的makefile可知,编译链接时使用了Xenomai posix skin:

获取编译参数
root@u2204:~/ipipe-arm64/xenomai_install# DESTDIR=$(pwd) usr/xenomai/bin/xeno-config --skin=posix --cflags
-I/root/ipipe-arm64/xenomai_install/usr/xenomai/include/cobalt -I/root/ipipe-arm64/xenomai_install/usr/xenomai/include -march=armv8-a -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__COBALT__ -D__COBALT_WRAP__

获取链接参数
root@u2204:~/ipipe-arm64/xenomai_install# DESTDIR=$(pwd) usr/xenomai/bin/xeno-config --skin=posix --ldflags
-Wl,--no-as-needed -Wl,@/root/ipipe-arm64/xenomai_install/usr/xenomai/lib/cobalt.wrappers -Wl,@/root/ipipe-arm64/xenomai_install/usr/xenomai/lib/modechk.wrappers  /root/ipipe-arm64/xenomai_install/usr/xenomai/lib/xenomai/bootstrap.o -Wl,--wrap=main -Wl,--dynamic-list=/root/ipipe-arm64/xenomai_install/usr/xenomai/lib/dynlist.ld -L/root/ipipe-arm64/xenomai_install/usr/xenomai/lib -lcobalt -lmodechk -lpthread -lrt -march=armv8-a

关键点,是链接参数中的一个标志:
-Wl,@/root/xenomai/xenomai-v3.2.1/lib/cobalt/cobalt.wrappers

-Wl,@/root/xenomai/xenomai-v3.2.1/lib/cobalt/cobalt.wrappers

//文件内容
# cat lib/cobalt/cobalt.wrappers
--wrap pthread_attr_init
--wrap pthread_create
--wrap pthread_setschedparam
--wrap pthread_getschedparam
--wrap pthread_setschedprio
--wrap pthread_yield
--wrap sched_yield
--wrap sched_get_priority_min
--wrap sched_get_priority_max
--wrap sched_setscheduler
--wrap sched_getscheduler
--wrap pthread_kill
--wrap 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值