LDD3(p:453)演示dma_map_single使用作为参数传入的缓冲区.
bus_addr = dma_map_single(&dev->pci_dev->dev, buffer, count, dev->dma_dir);
Run Code Online (Sandbox Code Playgroud)
Q1:这个缓冲区来自哪里/哪里?
kmalloc?
Q2:为什么DMA-API-HOWTO.txt状态我可以使用raw kmalloc进行DMA转换?
表格http://www.mjmwired.net/kernel/Documentation/DMA-API-HOWTO.txt
L:51如果您通过页面分配器kmalloc()获取了内存,那么您可以使用从这些例程返回的地址与该内存进行DMA.
L:74你不能接受kmap()调用和DMA的返回.
kmalloc给我的硬件设备?virt_to_bus先运行它?dma_map_single?问题3:DMA传输完成后,我可以通过kmalloc地址读取内核驱动程序中的数据吗?
addr = kmalloc(...);
...
printk("test result : 0x%08x\n", addr[0]);
Run Code Online (Sandbox Code Playgroud)
问题4:将这个用户空间送到用户空间的最佳方式是什么?
copy_to_user?我需要创建一些由多个工厂组成的工厂
这是我的模特
Topic
has_many :plan_topics
has_many :plans, :through => :plan_topics
PlanTopic
belongs_to :plan
belongs_to :topic
Plan
has_many :subscriptions
has_many :members, :through => :subscriptions
has_many :plan_topics
has_many :topics, :through => :plan_topics
Subscription
belongs_to :member
belongs_to :plan
Member
has_many :subscriptions
has_many :plans, :through => :subscriptions
Run Code Online (Sandbox Code Playgroud)
这就是我所拥有的
Factory.define :topic do |topic|
topic.name "Operations"
end
Factory.define :plan do |plan|
plan.title "A test Finance plan"
plan.price "200"
end
Factory.define :plan_topic do |plan_topic|
plan_topic.topic {|topic| topic.association(:topic)}
plan_topic.plan {|plan| plan.association(:plan)}
end
Run Code Online (Sandbox Code Playgroud)
我想做的是 - 工厂(:member_with_subscription)
Factory.define :member_with_subscription do …Run Code Online (Sandbox Code Playgroud) 我有一个像这样的数据模型:
# columns include collection_item_id, collection_id, item_id, position, etc
class CollectionItem < ActiveRecord::Base
self.primary_key = 'collection_item_id'
belongs_to :collection
belongs_to :item
end
class Item < ActiveRecord::Base
has_many :collection_items
has_many :collections, :through => :collection_items, :source => :collection
end
class Collection < ActiveRecord::Base
has_many :collection_items, :order => :position
has_many :items, :through => :collection_items, :source => :item, :order => :position
end
Run Code Online (Sandbox Code Playgroud)
项目可以出现在多个集合中,也可以在同一集合中的不同位置出现多次.
我正在尝试创建一个帮助方法,创建一个包含每个集合中每个项目的菜单.我想使用collection_item_id来跟踪请求之间当前选择的项目,但我无法通过Item类访问连接模型的任何属性.
def helper_method( collection_id )
colls = Collection.find :all
colls.each do |coll|
coll.items.each do |item|
# !!! FAILS HERE ( undefined method …Run Code Online (Sandbox Code Playgroud) 像Win32一样丑陋的Microsoft编译器是使用__declspec宏,它确实具有明确关于你想要导出什么的优点.
将相同的代码移动到Linux gnu/gcc系统现在意味着导出所有类!(?)
这是真的吗?
有没有办法在gcc下的共享库中导出类?
#ifndef WIN32
#define __IMPEXP__
#else
#undef __IMPEXP__
#ifdef __BUILDING_PULSETRACKER__
#define __IMPEXP__ __declspec(dllexport)
#else
#define __IMPEXP__ __declspec(dllimport)
#endif // __BUILDING_PULSETRACKER__
#endif // _WIN32
class __IMPEXP__ MyClass
{
...
}
Run Code Online (Sandbox Code Playgroud) 当涉及到内核 API 的工作时,我对 IRQ 和向量有点困惑。
我想使用向量 0xfa 进行一些由可编程 lapic 生成的中断处理。
request_irq我查看了诸如和set_intr_gate(也alloc_intr_gate调用)之类的 API set_intr_gate,用于在我的 IDT 表中启用向量。两者是出于相同的目的,还是完全不同?使用它的最佳方式是什么?
在 heroku 上使用 selenium webdrivers 时出现以下错误。(rspec->水豚->硒)
Net::ReadTimeout: Net::ReadTimeout with #<TCPSocket:(closed)>
Run Code Online (Sandbox Code Playgroud)
我有heroku-buildpack-google-chrome带有 webdrivers-gem的buildpack。
并在规范设置中有以下块:
chrome_shim = ENV.fetch("GOOGLE_CHROME_SHIM", nil)
Selenium::WebDriver::Chrome.path = chrome_shim
chrome_opts = { "chromeOptions" => { "binary" => chrome_shim } }
Capybara.register_driver :selenium do |app|
Capybara::Selenium::Driver.new(
app,
browser: :chrome,
desired_capabilities: Selenium::WebDriver::Remote::Capabilities.chrome(chrome_opts)
)
end
Capybara.javascript_driver = :headless_chrome
Run Code Online (Sandbox Code Playgroud)
Webdrivers.logger.level = :DEBUG输出在这里https://gist.github.com/IanVaughan/3e0c50d2fa4a60e672b96f6726fbbb8c
capybara (3.30.0)
webdrivers (4.2.0)
selenium-webdriver (3.142.7)
Run Code Online (Sandbox Code Playgroud)
完整的堆栈跟踪:https : //gist.github.com/IanVaughan/09b31613833d965ee4f3b7d1e48fd1e2
我正在运行的规范是:
capybara (3.30.0)
webdrivers (4.2.0)
selenium-webdriver (3.142.7)
Run Code Online (Sandbox Code Playgroud) 我正在编写一个设备驱动程序来访问PCIe卡上FPGA中的内存.
卡片启动并被探测/发现: -
的/ proc/IOMEM
80000000-840fffff : PCI Bus #03
80000000-83ffffff : 0000:03:00.0
84000000-840fffff : 0000:03:00.0
Run Code Online (Sandbox Code Playgroud)
所以,读LDD /等我编写了一个调用request_mem_region的80000000,并通过请求指向它的指针ioremap_nocache
1)我是否需要request_mem_region和a一样ioremap_nocache,我不能只使用后者?
/ proc/iomem insmod我的设备驱动程序后: -
80000000-840fffff : PCI Bus #03
80000000-83ffffff : 0000:03:00.0
80000000-8003ffff : fp2
84000000-840fffff : 0000:03:00.0
Run Code Online (Sandbox Code Playgroud)
2)对我来说看起来不太合适......?
无论如何,读取不起作用(它没有编码如下,它有检查等): -
#define BAR_ADDR 0x80000000
void *base = ioremap_nocache(BAR_ADDR, 0x40000);
void *address = base + KNOWN_REG_LOCATION;
int data = ioread32(address);
printk("fp2: address:0x%08x, data:0x%08x\n", address, data);
Run Code Online (Sandbox Code Playgroud)
产出: -
address:0xfd500000, data:0xffffffff
Run Code Online (Sandbox Code Playgroud)
我可以 …
我试图通过PCI总线读取低于32位的读取到VME桥接芯片(Tundra Universe II),然后将其转移到VME总线并由目标接收.
目标VME应用程序仅接受D32(数据宽度读取为32位)并将忽略其他任何内容.
如果我使用在VME窗口上映射的位字段结构(nmap'd到主存储器中),我可以读取> 24位的位字段,但是任何不足都会失败.即: -
struct works {
unsigned int a:24;
};
struct fails {
unsigned int a:1;
unsigned int b:1;
unsigned int c:1;
};
struct main {
works work;
fails fail;
}
volatile *reg = function_that_creates_and_maps_the_vme_windows_returns_address()
Run Code Online (Sandbox Code Playgroud)
这表明,结构工程,读为32位,但一读通过失败的结构一对如REG-> fail.a是越来越因素下读取X位.(其中X可能是16或8?)
所以问题是:
a)这缩小了哪里?编译器?OS?还是Tundra芯片?
b)执行的读操作的实际大小是多少?
我基本上想排除芯片以外的一切.关于它的文档是在网上,但如果可以证明通过PCI总线请求的数据宽度是32位,那么问题可归咎于Tundra芯片!
编辑: -
具体的例子,代码是: -
struct SVersion
{
unsigned title : 8;
unsigned pecversion : 8;
unsigned majorversion : 8;
unsigned minorversion : 8;
} Version;
Run Code Online (Sandbox Code Playgroud)
所以现在我把它改成了: - …
我想从我的脚本中轻松保存变量名称及其内容.
目前 :-
LOGFILE=/root/log.txt
TEST=/file/path
echo "TEST : ${TEST}" >> ${LOGFILE}
Run Code Online (Sandbox Code Playgroud)
期望: -
LOGFILE=/root/log.txt
function save()
{
echo "$1 : $1" >> ${LOGFILE}
}
TEST=/file/path
save TEST
Run Code Online (Sandbox Code Playgroud)
显然上面的save功能只是保存TEST : TEST
我希望它保存TEST : /file/path
可以这样做吗?怎么样?提前谢谢了!
我在一个视图上有一些复选框,我想在另一个视图上评估,但我不明白它在做什么.
我已经阅读了帖子/博客,说明了不同的方法name: -
update_params[] # array
update_params[0], update_params[1] # known indexed array
update_params0, update_params1 # differently named
Run Code Online (Sandbox Code Playgroud)
所以第一个似乎是最常见的: -
# views/index.erb
<input type="checkbox" name="update_params[]" value="Copy" />Update the host<br/>
<input type="checkbox" name="update_params[]" value="Start" />Start the software<br/>
Run Code Online (Sandbox Code Playgroud)
应该value编入索引吗?0,1?
所以我想要两个结果
1)显示从version.erb视图上的index.erb视图中选择的选项.
所以它看起来像: -
Copy : Yes
Start : No
Run Code Online (Sandbox Code Playgroud)
目前我有: -
# views/version.erb
<p>Copy : <%= params['update_params[0]'] %></p>
<p>Start : <%= params['update_params[1]'] %></p>
Run Code Online (Sandbox Code Playgroud)
2)EVAL选项,来传递给脚本,使得它们成为命令行选项,即-c,-l
所以我的"控制器"
# update.rb
helpers do
def run_update(version, host, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Ruby on Rails发送带附件的电子邮件.我按照ActionMailer网站的说明进行操作.
def welcome(recipient)
@account = recipient
attachments['file.csv'] = File.read('/path/to/users.csv')
mail(:to => recipient,
:bcc => ["email@example.com", "email2@example.com"],
:subject => "Sending attachment")
end
Run Code Online (Sandbox Code Playgroud)
我能够收到电子邮件,但没有附件,我试图附加csv文件,但我得到一个名为"noname"的文件作为附件