LINUX.ORG.RU

Всё ли нормально в символьном устройстве?

 , ,


2

5

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

#include <linux/init.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/cdev.h>
#include <linux/slab.h>
#include <linux/uaccess.h>
#include <linux/sched.h>
#include <linux/string.h>
MODULE_LICENSE("Dual BSD/GPL");

dev_t dev;
int lock;
unsigned baseminor = 0;
unsigned count = 1;
unsigned scull_major = 0;
char *name = "scull";
struct scull_dev {
	int quantum;
	int qset;
	unsigned long size;
	unsigned int access_key;
	struct semaphore sem;
struct cdev cdev;
};
struct scull_dev *sdev;
char *data;

loff_t scull_llseek ( struct file *file, loff_t pos, int n )
{
}
ssize_t scull_read ( struct file *file, char __user *buf, size_t count, loff_t *pos)
{
	char *p;
	p = data;
	p += *pos;

	int len = strlen ( p );

	len = len > 4096 ? count : len;

	memset ( buf, 0, sizeof buf );
	
	copy_to_user ( buf, p, len ); 

	*pos += len;

	return len;
}
ssize_t scull_write ( struct file *file, const char __user *buf, size_t n, loff_t *lt )
{

}
int scull_open ( struct inode *inode, struct file *filp )
{
	if ( lock ) while ( lock ){};
	lock = 1;
	struct scull_dev *scdev;
	struct task_struct *task;

	scdev = container_of ( inode->i_cdev, struct scull_dev, cdev );
	filp->private_data = scdev;

	data = kmalloc ( 16386, GFP_USER );
	char *p, *h;
	p = data;
	int len = 0;

	for_each_process(task) 
	{
		h = &task->comm[0];
		for ( ; *h != 0 && len < 16384; p++, h++, len++ ) *p = *h;
		*p = 32;
		p++;
		len++;
		if ( len > 16384 ) break;
		printk ( "%s\n", task->comm );
	}
	*p = 0;

	return 0;
}
int scull_release ( struct inode *inode, struct file *file )
{
	kfree ( data );
	lock = 0;
	return 0;
}

struct file_operations scull = {
	.owner = THIS_MODULE,
	.llseek = scull_llseek,
	.read = scull_read,
	.write = scull_write,
	.open = scull_open,
	.release = scull_release
};

static int hello_init ( void )
{
	sdev = kmalloc ( sizeof ( struct scull_dev ), GFP_KERNEL );
	int err;
	int result = alloc_chrdev_region ( &dev, baseminor, count, name );
	scull_major = MAJOR(dev);
	cdev_init ( &sdev->cdev, &scull );
	sdev->cdev.owner = THIS_MODULE;
	sdev->cdev.ops = &scull;
	err = cdev_add ( &sdev->cdev, dev, 1 );
	if ( err )
		printk (KERN_NOTICE "Error %d adding scull%d", err, 0 );
	
}

static void hello_exit ( void )
{
	cdev_del ( &sdev->cdev );
	kfree ( sdev );
	unregister_chrdev_region ( dev, count );
}

module_init ( hello_init );
module_exit ( hello_exit );

Ответ на: комментарий от Pinkbyte

Насчёт sizeof, я знаю что надо не на ссылку применять, не углядеть тоже можно. Ты как в си стал разбираться, я незнаю какую книжку для примера почитать, потому как в них я не находил об этом. Ладно, я ваше мастерство не видел, даже i-rinat отказался написать строчку кода. Видимо вы только можете себя хвалить за то какие вы, и что вы в код умеете писать. Но так как я не вижу наглядно вашей помощи, то вы обычные болтуны короче. О каком мастерстве может быть речь, если вы мне не можете помочь. Показать хитрые приёмы. Можете дальше хвалить себя, а я посмотрю, кто из вас реально относиться к мастерам. Ну так вот. Я у вас знания только скопирую, что тут плохого, рабочее место не займу, так что можете смело мне все свои секреты в стиле и программировании писать, я с радостью узнаю от вас что-то новенькое. Да вы на деле покажите кто вы. Что вы мне своё резюме суёте.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от u0atgKIRznY5

Никак. Ты не можешь законнектиться ко мне и скачать мозг.

Пути обучения тебе уже подсказали выше.

post-factum ★★★★★
()
Ответ на: комментарий от u0atgKIRznY5

А с хера ли ты решил, что тебе должны все прям расстелиться и написать за тебя код? Тебе указали на проблемы, дали референсную книгу для изучения Си (K&R). Иди учи язык, и начни с более простых вещей, нежели кернелспейс. А лучше таки учи раст, как тут посоветовали, он хотя бы по пальцам настучит за ошибки.

mersinvald ★★★★★
()
Ответ на: комментарий от u0atgKIRznY5

то вы обычные болтуны короче

Мы не обычные болтуны. Мы высококвалифицированные болтуны.

i-rinat ★★★★★
()
Ответ на: комментарий от mersinvald

Что ты вообще не понимаешь что мне нужно? Я создал тему, и есть вопросы. Человек, который перейдёт по этой теме увидит только что? То как вы юлите мне что-то тут. Незнаете ответа не пишите бред. Мне нужны ответы на чётко поставленные вопросы. А ваше советы настолько банальны, что об этом обычно школьники пишут.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от u0atgKIRznY5

я незнаю какую книжку для примера почитать, потому как в них я не находил об этом.

в книжках не всегда есть готовые ответы, но хороших книг масса.

Например классика:

K&R,

Бьерн Страуструп. Язык программирования С++

Развивают упражнения, ревью (есть специальные форумы, где можно выложить код для критики), статьи, умение понимать что нужно + поиск. Навыки английского.

anonymous
()
Ответ на: комментарий от anonymous

Навыки английского.

Да тут ему и навыки русского не помешали бы.

post-factum ★★★★★
()
Ответ на: комментарий от u0atgKIRznY5

почему вы не отвечаете на мои ответы??!!111 советы мне тут не нужно! ответы давай-давай!!11 ишь умные все стали!

anonymous
()
Ответ на: комментарий от u0atgKIRznY5

Твои вопросы возникают от незнания языка Си, и решением всех твоих проблем было бы изучить как следует сам язык, вместо того, чтобы плодить кучу тупых тем на ЛОРе с одинаково тупыми детскими ошибками в коде, надеясь что кто-то бесплатно будет разгребать твой говнокод

SZT ★★★★★
()
Ответ на: комментарий от u0atgKIRznY5

Берешь книгу Стивена Прата «Язык программирования C. Лекции и упражнения», читаешь, отвечаешь на вопросы в конце каждой главы и выполняешь все упражнения. Всё.

anonymous
()
Ответ на: комментарий от anonymous

Да я, если честно, даже не понял, откуда он начал. Прочел книжки по синтаксису си и принялся за ядро и системные вызовы? Зачем?

narkoman228
()
Ответ на: комментарий от narkoman228

Может он с какого-то жабаскрипта перелез на си, и такой «о, а тут же синтаксис такой же, вот круто, буду ядро писать ща!»

SZT ★★★★★
()
Ответ на: комментарий от SZT

Ну, не настолько, скорее просто опыта нет. Просто зря он в системные вызовы полез, читая гайды в инете, а не маны.

Напиши плеер, ОП.

narkoman228
()
Ответ на: комментарий от SZT

От вас толку короче мало. Посмотрел твои созданные темы на форуме, они оказались ещё тупее чем мои, так что не надо брызгать слюнями и пытаться обьяснить от чего вопросы могут появляться.

чтобы плодить кучу тупых тем на ЛОРе с одинаково тупыми детскими ошибками в коде, надеясь что кто-то бесплатно будет разгребать твой говнокод

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

u0atgKIRznY5
() автор топика
Ответ на: комментарий от narkoman228

Какие гайды в инете, на эту темы в инете только с этого форума мне что-то доказать хотят. В книге мало по драйверу написано. Я так понел, что от вас толку мало. Они там все форки понаделывают, а потом смотрят изменения в патчах, думая что что нибудь поймут. Самый лучший вообщем способ, который написан в одной книжке, это читать чужой код. Таки придётся читать символьные драйвера линукса (которые не поленились написать), коли здесь нет умельцев.

u0atgKIRznY5
() автор топика

Очень похоже на троллинг. Возможно, кто-то завёл себе виртуала для развлекухи.

anonymous
()
Ответ на: комментарий от u0atgKIRznY5

От вас толку короче мало. Посмотрел твои созданные темы на форуме, они оказались ещё тупее чем мои

Ах, ну ты прямо оскорбил меня до глубины души. Пойду повешусь.

Я между прочим программированием зарабатываю деньги, а ты?

SZT ★★★★★
()
Ответ на: комментарий от narkoman228

а не писать свой кривой код

Вот нифига, это надо. Только не так как ТС.

anonymous
()
Ответ на: комментарий от SZT

Я нет. Но зарабатывать своим любимым делом это хорошо. Но знайте, вам когда то тоже помогали невзирая на ваши знания. А теперь когда вы знаете всё это, ленитесь помогать. Сами выбираете системы с исходными кодами чтобы можно было всё увидеть, а сами ни строчки кода не можете предоставить. Наверное ты скажешь, «А что, зачем плодить такой простой код, ведь я могу делами полезнее заниматься».

u0atgKIRznY5
() автор топика
Ответ на: комментарий от u0atgKIRznY5

Во-первых я вообще-то занимался репетиторством и обучал людей именно конкретно языку Си. Во-вторых, когда мои познания Си были на уровне твоих, я не лез спамить на ЛОР, а просто брал книгу K&R и решал задачи оттуда, что я и тебе уже в который раз настоятельно советую сделать. Если тебя такой вариант не устраивает по каким-либо причинам, можешь взять другую книжку или же найти человека, который бы за деньги или бесплатно стал бы с тобой заниматься. Но начинать с написания ядерных модулей точно не стоит

SZT ★★★★★
()
Ответ на: комментарий от SZT

Почему не стоит? Ничего не случиться. Я даже как то встраивал системную функцию, правда только через ассемблер смог её выполнить.

Во-вторых, когда мои познания Си были на уровне твоих, я не лез спамить на ЛОР, а просто брал книгу K&R и решал задачи оттуда, что я и тебе уже в который раз настоятельно советую сделать.

Пока ты читаешь k&r, я уже с ядром знакомлюсь. Так что, молодец. Хорошо что ты книжку выбрал. Но я её читал, а задания не интересные были, я их не выполнял, но язык понел.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от post-factum

Что ты прикалываешься? Значил линукс бесплатно, открытый код пожалуйста. А как сам написать, так за деньги сразу. Я имел ввиду за какое время можешь написать функцию?

u0atgKIRznY5
() автор топика
Ответ на: комментарий от u0atgKIRznY5

А что не так? Время - деньги.

anonymous
()
Ответ на: комментарий от u0atgKIRznY5

А что тебе не нравится все хорошо. Ты заплатил за работу - он выполнил, код выложили в общий доступ - все логично.

Silerus ★★★★
()
Ответ на: комментарий от u0atgKIRznY5

еще раз. opensource != freeware. Любой труд должен быть оплачен, как это другой вопрос. Про твой код уже многие здесь сказали - я промолчу.

Silerus ★★★★
()
Ответ на: комментарий от Unicode4all

Ты чё? Толку от форума если здесь пытаются заработать люди с образованием? Видимо совсем худо у них, раз уж за любую работу беруться.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от post-factum

Ну говорю же, начнём с 50$.

Вы такие умные наверное. Хорошо разбираетесь да? Как помню читал в форензике, что человек, который становиться профессионалом в программировании, переходит к созданию вирусов. Так что всякие xor надеюсь вы уже умеете делать. Потом пишут в новостях, что вот мол вирусы заражают компьютеры, а такое ведь такие умники как вы пишут. Так что, сначала лучше бесплатно делать, так вы хоть не спалитесь. Вот ты можешь написать кейлоггер?

u0atgKIRznY5
() автор топика
Ответ на: комментарий от u0atgKIRznY5

Да все уже поняли, чем ты тут занимаешься.

Hezký den.

post-factum ★★★★★
()
Ответ на: комментарий от u0atgKIRznY5

человек, который становиться профессионалом в программировании, переходит к созданию вирусов

Всякое вредоносное ПО я писал ещё в школе, а потом из этого вырос. Сколько наблюдаю за тобой в тредах — всё время складывается ощущение, что у тебя какое-то школьно-дилетантское восприятие уровня профессионализма. Мол, «профессионалы пишут на Си, а на остальное смотрят как на говно», «профессионал наизусть помнит всё, связанное с тем, что я сейчас изучаю», «есть чёткий набор навыков, позволяющий отделить новичков от продвинутых» и тому подобное, а ты пытаешься себя под это восприятие загнать. Не надо так, это весьма далеко от реальности.

Ещё такой момент: ты ждёшь, что тебе укажут на ошибки, ты их исправишь и от этого твой уровень мастерства повысится. Даже если так будет, в чём я довольно сильно сомневаюсь, это гораздо медленнее, чем последовать советам из этого и предыдущих тредов. От того, что, допустим, я укажу тебе, что функция hello_init() должна возвращать int, а на деле не возвращает ничего, твой менталитет не поменяется. А должен.


Так что всякие xor надеюсь вы уже умеете делать

Я очень надеюсь, что ты это так пошутил. Упоминать в одной строчке «профессионал», «создание вирусов» и «xor» — это даже не моветон.


мол вирусы заражают компьютеры

К слову, вирусов я с начала двухтысячных не видел, вымерли все. Сейчас в основном шифровальщики да трояны

XMs ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.