小编Ian*_*han的帖子

Linux内核设备驱动程序将DMA转换为内核空间

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的返回.

  1. 所以我可以将返回的地址传递kmalloc给我的硬件设备?
  2. 或者我应该virt_to_bus先运行它?
  3. 或者我应该把它传递给dma_map_single

问题3:DMA传输完成后,我可以通过kmalloc地址读取内核驱动程序中的数据吗?

addr = kmalloc(...);
...
printk("test result : 0x%08x\n", addr[0]);
Run Code Online (Sandbox Code Playgroud)

问题4:将这个用户空间送到用户空间的最佳方式是什么?

  1. copy_to_user
  2. mmap kmalloc内存?
  3. 其他?

linux linux-device-driver linux-kernel dma

8
推荐指数
1
解决办法
6453
查看次数

工厂女孩多个has_many通过

我需要创建一些由多个工厂组成的工厂

这是我的模特

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)

ruby-on-rails factory-bot

6
推荐指数
2
解决办法
3599
查看次数

使用has_many:through时如何访问rails连接模型属性

我有一个像这样的数据模型:

# 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)

ruby activerecord ruby-on-rails

5
推荐指数
1
解决办法
1万
查看次数

不与共享库共享所有类

像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)

c++ linux gcc g++ shared-libraries

5
推荐指数
1
解决办法
2435
查看次数

Linux 内核中 IRQ 和中断向量之间的区别

当涉及到内核 API 的工作时,我对 IRQ 和向量有点困惑。

我想使用向量 0xfa 进行一些由可编程 lapic 生成的中断处理。

request_irq我查看了诸如和set_intr_gate(也alloc_intr_gate调用)之类的 API set_intr_gate,用于在我的 IDT 表中启用向量。两者是出于相同的目的,还是完全不同?使用它的最佳方式是什么?

interrupt linux-kernel interrupt-handling

5
推荐指数
0
解决办法
3078
查看次数

在 Heroku 上使用 webdrivers selenium 获取 ReadTimeout

在 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)

rspec heroku capybara selenium-webdriver webdrivers-gem

5
推荐指数
1
解决办法
508
查看次数

实现PCIe Linux设备驱动程序(想从内核驱动程序访问我的卡寄存器)

我正在编写一个设备驱动程序来访问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_region80000000,并通过请求指向它的指针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)

我可以 …

linux-kernel pci

4
推荐指数
1
解决办法
8012
查看次数

将位字段读取强制为32位

我试图通过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)

所以现在我把它改成了: - …

c c++ bit bit-fields

2
推荐指数
1
解决办法
2452
查看次数

从string/nameonly参数创建变量以在bash中提取数据?

我想从我的脚本中轻松保存变量名称及其内容.

目前 :-

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

可以这样做吗?怎么样?提前谢谢了!

bash

1
推荐指数
1
解决办法
644
查看次数

获取复选框的值[Ruby/Sinatra(Rails)]

我在一个视图上有一些复选框,我想在另一个视图上评估,但我不明白它在做什么.

我已经阅读了帖子/博客,说明了不同的方法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 forms ruby-on-rails sinatra

1
推荐指数
1
解决办法
3396
查看次数

通过SendGrid使用Ruby on Rails发送带附件的电子邮件

我正在尝试使用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"的文件作为附件

ruby email ruby-on-rails ruby-on-rails-3

1
推荐指数
1
解决办法
5125
查看次数