Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
rt-thread vmm 排程問題
发布于 2014-12-23 12:01:42 浏览:3700
订阅该版
大家好, 最近在閱讀rt-thread的程式碼, 對於vmm/linux的部分有點疑問 我的理解是, vmm entry 進入之後, 會將linux 原來的 interrupt vector 中的irq/firq位址取代為 rt-thread的interrupt handler. 之後的中斷由rt-thread vmm來先處理 在entry的時候, 會init vmm_thread 這個vmm_thread 詳細作用是甚麼呢? 沒看到它的 thread function? 僅看到定義於 SECTION(".bss.share.vmm") 排程部分是怎麼pass 給linux的呢? 理解上, 是由每次 tick interrupt, vmm 收走之後, 做完了自己的schedule, 將tick interrupt pass 給 guest os? (如何pass?由哪邊pass?) 這部分的該程式碼由哪邊追起? 謝謝各位:)
查看更多
11
个回答
默认排序
按发布时间排序
reliveinfire
2014-12-23
这家伙很懒,什么也没写!
由vector_irq 追起 一般處理interrupt 的流程, 後續, ``` /* check whether we need to do IRQ routing * ensure the int is disabled. Or there will be an infinite loop. */ ldr r0, =rt_current_thread ldr r0, [r0] ldr r1, =vmm_thread cmp r0, r1 beq switch_to_guest ``` 不是很理解這邊的設計, 與vmm_thread的關聯性, 找不到vmm_thread的 thread function 內容. 猜測, 是否 每次rtt thread 啟動, 會將自己複製到 vmm_thread的位置? 以做判斷目前被中斷的thread 為guest_os 或者 rtt thread? ``` switch_to_guest: #ifdef RT_VMM_USING_DOMAIN @ We are going to execute rt-thread code but accessing the content of the @ guest. So switch to super domain. ldr r1, =super_domain_val ldr r0, [r1] mcr p15, 0, r0, c3, c0 #endif /* check whether there is a pending interrupt for Guest OS */ bl vmm_virq_check #ifdef RT_VMM_USING_DOMAIN @ All done, restore the guest domain. mcr p15, 0, r5, c3, c0 #endif cmp r0, #0x0 beq route_irq_to_guest ldmfd sp!, {r0-r12,lr} subs pc, lr, #4 route_irq_to_guest: ldmfd sp!, {r0-r12,lr} b orig_irq_isr #endif /* RT_USING_VMM */ ``` 這段, route_irq_to_guest 的用意不太了解. 為何要在 switch_to_guest 的狀態下才將 pending virq 送至guest os? 還請了解這段設計的先進指教 感謝
bernard
2014-12-23
这家伙很懒,什么也没写!
排程是什么意思呢? 建议你先把一个RT-Thread + Linux的VMM环境先跑起来,可以用QEMU模拟的ARM Cortex-A8环境。
reliveinfire
2014-12-23
这家伙很懒,什么也没写!
好的, 謝謝你, 我找個時間試著跑看看, 排程我用詞有點不精確, 本來是想說 linux process, 跟 rtt thread 是交錯運作的\n就是 rtt thread 可能做到一半, 也許要切到 linux process 但剛剛仔細trace一下, 似乎每次中斷, rt-thread 會將全部的 interrupt, 跟 thread 工作做完, 再將 interrupt 送給 linux (如果是timer tick interrupt, linux 就會自行schedule了) 這樣理解正確嘛? 關於vmm_thread 部分的用途, 還是不太明白, 可以稍微說明一下嘛? 還是哪邊有它的定義? 不知道vmm_thread 的內容是甚麼時間點填到.bss.share.vmm的 感謝!
grissiom
2014-12-23
这家伙很懒,什么也没写!
哦,trace 是用什么工具做的呢?嘿嘿嘿…… 对的,Linux 相当于是 RTT 的 idle,所以只有 RTT 做完事情之后才会切换到 Linux,Linux 是不能打断 RTT 的。
reliveinfire
2014-12-24
这家伙很懒,什么也没写!
>哦,trace 是用什么工具做的呢?嘿嘿嘿…… > >对的,Linux 相当于是 RTT 的 idle,所以只有 RTT 做完事情之后才会切换到 Linux,Linux 是不能打断 RTT 的。 --- 了解,想跟各位高手確認一下是否如此, 怕自己誤會了. 使用cscope+grep 看程式碼 所以 vmm_thread 相當於idle thread, 當我們要切換到linux時, currrent_thread 就會是 vmm_thread, 當 linux 切到 rt-thread的時候, rt-thread部分也是停在vmm_thread, 這時stack資訊會存在 vmm_thread stack ? 經過你的提點似乎明瞭了, 當rt-thread 沒事做的時候 schedule 會選到 vmm_thread, 在rt_hw_context_switch / rt_hw_context_switch_interrupt_do, 做完, 若是選到vmm_thread, 之後其實值皆 switch_go_guest, 所以其實vmm_thread 沒有 entry 也沒關係, 因為不會跳進去它的entry function, 它只是用來記錄資訊 若是理解有誤請指正, 感謝. 謝謝指教! 先謝謝各位.
bernard
2014-12-24
这家伙很懒,什么也没写!
vmm_thread是Linux的代理thread,所以也不需要entry。当从Linux切换到RT-Thread时,Linux的上下文信息会被保留在vmm_thread中。
reliveinfire
2014-12-24
这家伙很懒,什么也没写!
>vmm_thread是Linux的代理thread,所以也不需要entry。当从Linux切换到RT-Thread时,Linux的上下文信息会被保留在vmm_thread中。 --- 恩恩 感謝 終於明白了!!! 學習了! 獲益良多!:)
grissiom
2014-12-24
这家伙很懒,什么也没写!
reliveinfire 是个牛人~ 您是在台湾?和 jserv 熟悉不?
reliveinfire
2014-12-24
这家伙很懒,什么也没写!
>reliveinfire 是个牛人~ > >您是在台湾?和 jserv 熟悉不? --- 是的 我在台灣, jserv 是system sofeware 的知名人士, 做這行的多少都聽過/認識他 [s:157] 最近因為一些需求, 做了一點相關的研究才找到這邊來向各位學習. 不過我在想, 如果 Rt-thread 先開, 再載入 linux 似乎較為複雜一些? 要額外處理一些記憶體mmu/中斷的問題.
bernard
2014-12-24
这家伙很懒,什么也没写!
RT-Thread先开也是有办法的,不过补丁肯定也是得重新打。所以比较好的方式依然还是RT-Thread + Linux双核双系统并行执行的方式(还有一种是RT-Thread作为TrustZone里的安全OS来执行)。
撰写答案
登录
注册新账号
关注者
1
被浏览
3.7k
关于作者
reliveinfire
这家伙很懒,什么也没写!
提问
1
回答
5
被采纳
0
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
【RT-Thread】【ci】【scons】将ci.attachconfig.yml和scons结合使用
2
Rt-thread中OTA下载后,bootloader不搬程序
3
ulog 日志 LOG_HEX 输出时间改为本地日期时间
4
在RT-Thread Studio中构建前执行python命令
5
研究一了一段时间RTT,直接标准版上手太难,想用nano,但又舍不得组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
I2C_IIC
ESP8266
UART
WIZnet_W5500
ota在线升级
cubemx
PWM
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
出出啊
1518
个答案
343
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
813
个答案
177
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
5
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
3
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部