2011-10-02 15 views
6

espero que me pueden ayudar: Estoy tratando de determinar si el dispositivo es extraíble o no, todo lo que tengo es el nombre del dispositivo (/ dev/sdc). En realidad, necesito determinar cuándo el archivo en medios extraíbles o en el disco local por la ruta completa de este archivo.obtener indicadores del dispositivo por nombre de dispositivo

he tryed para buscar en el current-> FS> pwd y todo lo que pude encontrar es un conjunto de banderas aquí: * current-> FS> pwd.mnt-> mnt_sb- > s_bdev-> bd_disk-> banderas * en conjunto GENHD_FL_REMOVABLE para dispositivos extraíbles

pero siempre consigo los mismos indicadores establecidos (como yo lo entiendo, s_bdev siempre apunta al mismo dispositivo (/ dev/sda)).

Así que ahora obtengo el nombre del dispositivo (/ dev/sdc) que contiene mi archivo mediante el análisis de mtab, pero todavía no puedo encontrarlo, extraíble o no.

¿Hay alguna forma de obtener la estructura block_device por nombre de dispositivo? (por ejemplo, la estructura de "archivo" se puede obtener llamando fd = open ("nombre") fl = fged (fd) donde los puntos fl a la estructura de "archivo")

Respuesta

1

Puede iterar sobre dispositivos de bloque usando class_dev_iter_init y class_dev_iter_next. Vea el código en block/genhd.cblk_lookup_devt para el uso.

Una vez que tenga el dispositivo, puede usar dev_to_disk para obtener un struct gendisk *, en el que puede verificar el indicador extraíble.

+0

Gracias, parece que resuelve mi problema – Makc

+0

Entonces, usando esta forma, cómo puedo determinar cuál de los dispositivos de bloque contiene mi archivo abierto si solo tengo la ruta completa a este archivo. – Makc

+1

@Makc: creo que puede usar 'vfs_stat', le dará una' struct kstat' en la que podrá comparar 'dev_t' con el dispositivo de bloque. – Hasturkun

1

lectura/sys/block/dev-name/removable ya que debe contener 1 si el dispositivo es extraíble o 0 si no es así. (dev-name = el nombre del dispositivo: sda, hda, fd0, ...)

+0

Sé de esto, pero de todos modos no funciona en versiones anteriores de Linux, gracias. – Makc

+0

Además, no conozco ninguna forma segura de leer archivos de módulos kernel. (He probado sys_read() y vfs_read() - es causa de "Oops" :)) ¿Quizás conoces alguna forma de acceder a sysfs desde el módulo kernel? – Makc

Cuestiones relacionadas