在Linux中产生一个系统调用以及怎样通过往Linux内核中增加一个新函数从而在该内核

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Linux中产生一个系统调用以及怎样通过往Linux内核中增加一个新函数从而在该内核相关的知识,希望对你有一定的参考价值。

若要在 kernel 里面新增加一个自己的 sys call,大致需要这么几个步骤:

a,新增自己 sys call 的代码,并修改相应 makefile;

b,修改相应头文件,分配自己的系统调用号;

c,系统调用通过中断加查表的方式实现,所以需要在系统调用表里面增加相关的项目,这需要修改相关的汇编源文件;

d,重新编译内核,并写测试程序测试新增的sys call;

注意几点:

1,上述步骤所要修改的文件/位置等对不同处理器架构来说,不尽相同;

2,对于应用层的测试代码来说,在 2.6.20 版本之前,可以使用相应的 _syscallN 宏;

但是2.6.20 版本后,这些宏已经被从 kernel 中去掉了,你需要使用应用层的 syscall 函数

来测试。

你可以在自己的sys call实现文件中加上 EXPORT_SYMBOL / EXPORT_SYMBOL_GPL 

等宏来导出你的全局变量或者函数,导出后,另外的模块或者其他内核代码就可以使用

这些变量和函数。

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

杭州巨立安(JulianTec)是杭州市场上

唯一由资深研发工程师所创办的机构。所以:

就专业程度和实在程度而言,杭州巨立安(JulianTec)

是您在arm架构下学习嵌入式Linux研发的上佳指导!

参考技术A 仿造之前内核自带

AVAudioPlayer 在 Swift 4.2 中产生延迟

【中文标题】AVAudioPlayer 在 Swift 4.2 中产生延迟【英文标题】:AVAudioPlayer produces lag in Swift 4.2 【发布时间】:2018-11-23 16:20:33 【问题描述】:

是的,我不是第一个提出这个问题的人,但我发现的一切都像是 4 岁,我找不到解决这个问题的方法。可能我只是不明白解决方案。

问题:

每次我在设备上启动应用程序并调用我的“声音”文件时,它都会滞后一会儿。我试图将声音设置为背景,但它仍然滞后。我还在应用程序的项目设置中为背景模式(音频、AirPlay 和画中画)设置了 Capabilitis 选项。

无论出于何种原因,在“背景”中调用“声音”都可以在 Xcode 的模拟器中正常工作。

我正在使用此代码调用 m4a 格式的声音文件:

var SoundCollect: AVAudioPlayer?

func SoundCollectStaff() 

do 

        if let fileURL = Bundle.main.path(forResource: "collect", ofType: "m4a") 

            SoundCollect = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: fileURL))

            SoundCollect?.prepareToPlay()
            SoundCollect?.play()

         else 

         print("no file found")
        

 catch let error 
    print("error failed with: \(error.localizedDescription)")
    

这段代码将声音设置为背景

func SetSoundinBackground() 

    do 

        try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [.mixWithOthers, .allowAirPlay])
        try AVAudioSession.sharedInstance().setActive(true)
        print("Session is Active")

     catch 
        print(error)
    


通过调用 SetSoundinBackground() 函数,我在设备上得到以下Error: Error Domain=NSOSStatusErrorDomain Code=-50 "(null)"

感谢您的帮助和建议!

【问题讨论】:

嗨,伙计。通过 SetSoundinBackground() 方法将声音发送到后台是什么意思? 该方法可以让应用在后台使用声音。 【参考方案1】:

好吧,解决方案似乎很简单。我将此添加到我的 SoundCollectStaff() 函数中:

DispatchQueue.global().async SoundCollect.play()

【讨论】:

以上是关于在Linux中产生一个系统调用以及怎样通过往Linux内核中增加一个新函数从而在该内核的主要内容,如果未能解决你的问题,请参考以下文章

PayPal Express Checkout 调用不会在布局 C 中产生 BAID

c++中产生不重复的随机数

AVAudioPlayer 在 Swift 4.2 中产生延迟

MATLAB中NaN是怎么产生的,又如何具体的去解决?

什么是UUID,Java中怎么产生UUID

Microsoft.Web.WebJobs.Publish 在部署包中产生重复的程序集