1
我需要找到一種輕鬆觸發DMA操作的方法,以方便硬件調試。是否可以在我的Linux中通過直接寫入其寄存器來初始化現有PCI設備(例如聲卡或網卡)上的DMA read
?或者我必須編寫一個自定義的驅動程序並通過insmod
調用它?如何讓PCI設備啓動DMA操作?
我需要找到一種輕鬆觸發DMA操作的方法,以方便硬件調試。是否可以在我的Linux中通過直接寫入其寄存器來初始化現有PCI設備(例如聲卡或網卡)上的DMA read
?或者我必須編寫一個自定義的驅動程序並通過insmod
調用它?如何讓PCI設備啓動DMA操作?
沒有標準的方法來啓動DMA操作。通常,您需要在主機上準備一個DMA緩衝區,並在您的設備上設置DMA寄存器,加載DMA地址,大小等。
但是,沒有用於PCI設備的DMA寄存器的單一標準。 你需要找到你的PCI設備的規格文件。在這個規範中,尋找DMA章節(這也稱爲PCI「主訪問」,而不是「目標訪問」)。
您會在那裏找到: - 如果支持分散收集或連續的DMA。 - 如何設置DMA寄存器,其中一個通常稱爲DMA CSR - 「DMA命令/狀態寄存器」。 - 如果設備支持複雜的DMA佈局(一個或多個環形緩衝區,DMA描述符鏈等)
但是好處是許多PCI設備都支持0尺寸的DMA。 這不會執行任何內存訪問,只會觸發「DMA完成」中斷。這可以是一個非常方便的地方,爲你開始。
是的,似乎沒有辦法,只能爲此寫一個PCI驅動程序。但問題是我其實沒有額外的PCI設備。我不知道是否可以使用任何現有的PCI卡?我可以只用'rmmod'原始驅動程序和'insmod'我的嗎? – qweruiop
如果它是可加載模塊,即不作爲內核的一部分進行編譯,而是作爲獨立可加載模塊進行編譯,則可以rmmod另一個模塊。如果您在'lsmod'中看到該模塊,則可以卸載它。 –