当前位置: 技术问答>linux和unix
如何让程序在CPU上裸跑?
来源: 互联网 发布时间:2016-10-02
本文导语: 最近有个客户需求,其对实时性要求相当的高,以至于程序不能跑在操作系统之上,需要直接跑在CPU上,ARM的或X86的。 我现在有两个初步想法,请大侠们给我评估评估: 1:硬件(譬如是ARM板子)只有一个核,这个...
最近有个客户需求,其对实时性要求相当的高,以至于程序不能跑在操作系统之上,需要直接跑在CPU上,ARM的或X86的。
我现在有两个初步想法,请大侠们给我评估评估:
1:硬件(譬如是ARM板子)只有一个核,这个核只能运行我的程序
问题:
(1)如何写代码?跟写Linux内核代码比较,有什么要注意的地方?
(2)如何编译代码?用gcc吗?编译时有什么要注意的地方吗?
(3)怎么让它运行起来?
2:硬件(譬如是ARM板子)有两个核,一个核运行我的程序(此程序代码跟一个核的一样),一个核跑Linux系统。
问题:
(1)在这里多一个Linux系统有什么好处?
(2)对我程序的运行的实时性会有什么影响?
谢谢!
我现在有两个初步想法,请大侠们给我评估评估:
1:硬件(譬如是ARM板子)只有一个核,这个核只能运行我的程序
问题:
(1)如何写代码?跟写Linux内核代码比较,有什么要注意的地方?
(2)如何编译代码?用gcc吗?编译时有什么要注意的地方吗?
(3)怎么让它运行起来?
2:硬件(譬如是ARM板子)有两个核,一个核运行我的程序(此程序代码跟一个核的一样),一个核跑Linux系统。
问题:
(1)在这里多一个Linux系统有什么好处?
(2)对我程序的运行的实时性会有什么影响?
谢谢!
|
关于1,建议参考uboot,vivi,redboot等bootloader的代码,这些程序都是直接跑在裸机上的。
关于2,虽然有双核,但不可能一个核跑OS,另一个核跑裸程序。因为内存、系统总线等都只有一套。
对实时性要求高的话,可以试试Vxworks
关于2,虽然有双核,但不可能一个核跑OS,另一个核跑裸程序。因为内存、系统总线等都只有一套。
对实时性要求高的话,可以试试Vxworks
|
写一个能把板子弄起来的bootloader,直接参考现有操作系统的就行,Linux或者vxWorks之类的。然后在从loader跳转到内核的那个地方跳到你的程序里,大概应该是这么做,可能细节上还得斟酌。
编译器用gcc就可以,编出来个elf之类的,然后在像ram加载的时候注意加载地址,从loader跳转的时候跳到第一条指令。
编译器用gcc就可以,编出来个elf之类的,然后在像ram加载的时候注意加载地址,从loader跳转的时候跳到第一条指令。
|
这个你直接去看bootloader吧,那个是裸跑程序,对于实时性要求很高,但是任务简单的,可以使用裸跑的办法来实现。但是要是你的任务复杂,需要多个任务同时运行的话,那还是os吧!如果裸跑的话,你可以把ARM板子当做一个supper单片机就行了!你想怎么搞就怎么搞啊!