Доступ к файлам устройств из кода ядра [дубликат]

Я разработал образец приложения. Я использовал строку как запись, вы можете сделать это, используя свою собственную сущность. Backspace также работает правильно.

 public class FilterViewModel
    {
        public IEnumerable DataSource { get; set; }       

        public FilterViewModel()
        {
            DataSource = new[] { "india", "usa", "uk", "indonesia" };           
        }
    }

public partial class WinFilter : Window
    {
          public WinFilter()
          {
             InitializeComponent();

             FilterViewModel vm = new FilterViewModel();
             this.DataContext = vm;
          }

          private void Cmb_KeyUp(object sender, KeyEventArgs e)
          {
              CollectionView itemsViewOriginal = (CollectionView)CollectionViewSource.GetDefaultView(Cmb.ItemsSource);

              itemsViewOriginal.Filter = ((o) =>
              {
                  if (String.IsNullOrEmpty(Cmb.Text)) return true;
                  else
                  {
                     if (((string)o).Contains(Cmb.Text)) return true;
                     else return false;
                  }
              });

             itemsViewOriginal.Refresh();

             // if datasource is a DataView, then apply RowFilter as below and replace above logic with below one
             /* 
              DataView view = (DataView) Cmb.ItemsSource; 
              view.RowFilter = ("Name like '*" + Cmb.Text + "*'"); 
             */
          }
     }

XAML


18
задан skaffman 25 March 2011 в 09:31
поделиться

5 ответов

Могу ли я спросить, почему вы пытаетесь открыть файл?

Мне нравится следить за развитием Linux (из любопытства, я не разработчик ядра, я делаю Java), и я ранее рассматривал этот вопрос. Я смог найти сообщение LKML об этом, в основном упомянув, что это обычно плохая идея. Я почти уверен, что LWN покрыл его в прошлом году, но мне трудно найти статью.

Если это частный модуль (например, для некоторых пользовательских аппаратных средств, и модуль не будет распределяется), тогда вы можете это сделать, но у меня создается впечатление, что если вы собираетесь отправить свой код на магистраль, это может быть не принято.

Эван Теран упоминает sysfs, который выглядит как хорошая идея для меня.

EDIT:

ОК, я нашел статью, которую я искал, это из Linux Journal . Это объясняет, почему делать такие вещи, как правило, плохая идея, а затем продолжает рассказывать вам, как это сделать в любом случае.

30
ответ дан MBCook 18 August 2018 в 20:10
поделиться
  • 1
    Это настраиваемый модуль, он не будет распространен. Мне нужно открыть файл, содержащий отображение inodes = & gt; контрольные суммы. – mipadi 9 November 2008 в 02:02
  • 2
    @mipadi: Я нашел статью, о которой я думал, она объясняет, как открыть и прочитать файл из ядра (после части «не делать этого»). Я отредактировал свой пост, чтобы отразить это и содержать ссылку. Удачи. – MBCook 9 November 2008 в 02:14

/ proc файловая система также хороша для частного использования, и это легко. http://www.linuxtopia.org/online_books/Linux_Kernel_Module_Programming_Guide/x773.html

1
ответ дан Denes Tarjan 18 August 2018 в 20:10
поделиться

, предполагая, что вы можете получить указатели на relavent указатели функций на системные вызовы open / read / close, вы можете сделать что-то вроде этого:

mm_segment_t fs = get_fs();
set_fs(KERNEL_DS);

fd = (*syscall_open)(file, flags, mode);
if(fd != -1) {
    (*syscall_read)(fd, buf, size);
    (*syscall_close)(fd);
}
set_fs(fs);

вам нужно будет создайте «syscall_*» указатели на функции, которые я показал. Я уверен, что есть лучший способ, но я считаю, что это сработает.

8
ответ дан Evan Teran 18 August 2018 в 20:10
поделиться

Вообще говоря, если вам нужно читать / записывать файлы из модуля ядра, вы делаете что-то неправильно в архитектуре.

Существуют механизмы (например, netlink или просто зарегистрировать устройство символов), чтобы разрешить модулю ядра разговаривать с вспомогательным процессом в пользовательском пространстве. Этот вспомогательный процесс в пользовательском пространстве может делать все, что захочет.

Вы также можете реализовать системный вызов (или такой), чтобы взять файловый дескриптор, открытый в пользовательском пространстве, и прочитать / записать его из ядра.

Это, вероятно, будет более аккуратным, чем попытка открыть файлы в пространстве ядра.

Есть некоторые другие вещи, которые уже открывают файлы из пространства ядра, вы можете посмотреть на них (на что обращает внимание драйвер цикла?).

2
ответ дан MarkR 18 August 2018 в 20:10
поделиться
  • 1
    Я фактически изменил механизм чтения из файла в / proc, поэтому мне, вероятно, не нужно будет читать файл напрямую. – mipadi 9 November 2008 в 16:05

Вы также можете найти информацию о sys_call_open в этом руководстве по программированию модулей ядра Linux .

1
ответ дан VonC 18 August 2018 в 20:10
поделиться
  • 1
    Да, я посмотрел на это. Кстати, I am исправляет открытый (2) системный вызов, и мне действительно нужно прочитать файл внутри моей исправленной версии. – mipadi 9 November 2008 в 01:15
Другие вопросы по тегам:

Похожие вопросы: