<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>EmbLogic &#187; to pravjot sir</title>
	<atom:link href="https://www.emblogic.com/blog/tag/to-pravjot-sir/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.emblogic.com/blog</link>
	<description>Embedded System and ARM Training</description>
	<lastBuildDate>Tue, 03 Mar 2020 13:00:06 +0000</lastBuildDate>
	<language>en-US</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.9.1</generator>
	<item>
		<title>Avtar Singh E-30.01.30</title>
		<link>https://www.emblogic.com/blog/08/avtar-singh-e-30-01-30-7/</link>
		<comments>https://www.emblogic.com/blog/08/avtar-singh-e-30-01-30-7/#comments</comments>
		<pubDate>Thu, 01 Aug 2013 12:43:29 +0000</pubDate>
		<dc:creator><![CDATA[Avtar Singh]]></dc:creator>
				<category><![CDATA[Character Driver]]></category>
		<category><![CDATA[to pravjot sir]]></category>

		<guid isPermaLink="false">http://www.emblogic.com/blog/?p=6986</guid>
		<description><![CDATA[RCS file: new_lkm.c,v Working file: new_lkm.c head: 1.30 branch: locks: strict root: 1.30 access list: symbolic names: keyword substitution: kv total revisions: 31;    selected revisions: 31 description: in this i register many no. of devices that we can provide at &#8230; <a href="https://www.emblogic.com/blog/08/avtar-singh-e-30-01-30-7/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>RCS file: new_lkm.c,v<br />
Working file: new_lkm.c<br />
head: 1.30<br />
branch:<br />
locks: strict<br />
root: 1.30<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 31;    selected revisions: 31<br />
description:<br />
in this i register many no. of devices that we can provide at the time of insmod as command line argument.<br />
use setup_struct_cdev() function i.e user defined to setup of the struct cdev,in this we use cdev_init() &amp; cdev_add().<br />
in cleanup we use cdev_del to delete the cdev setup for all devices.<br />
also used kmalloc() &amp; kfree() to allocate &amp; deallocate the memory to scull_dev (pointer of struct Sculldev).<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.30    locked by: root;<br />
date: 2013/08/01 12:32:18;  author: root;  state: Exp;  lines: +31 -0<br />
implemented capability also in my ioctl function.<br />
done some basic checking in program.<br />
added more command operations also .<br />
working successfully.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.29<br />
date: 2013/08/01 11:09:10;  author: root;  state: Exp;  lines: +112 -10<br />
implemented basic ioctl.<br />
in this i have made some basic commands like IOCMD_RESET,IOCMD_SQUANTUM,etc..<br />
made a new header file named ioctl_header.h,included in driver source code as well as in the application.<br />
so that commands become visible to the driver and applications.<br />
driver giving response to the requested commands by app.<br />
every operations of ioctl is mapped with the function named ioctl().<br />
working successfully.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.28<br />
date: 2013/07/28 18:02:06;  author: root;  state: Exp;  lines: +17 -5<br />
implemented create_read_proc_entry successfully.<br />
now device entry in /proc mapped with the my function named read_proc in the driver(new_lkm.c).<br />
it provide the information about the attributes of the sculldev or device like device name,device size,etc..<br />
some questions is still in mind<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.27<br />
date: 2013/07/28 16:14:45;  author: root;  state: Exp;  lines: +43 -6<br />
implemented create_proc_read_entry() in very simple way.<br />
able to print any string to the page in read_proc function using sprintf().<br />
till now working.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.26<br />
date: 2013/07/26 06:54:01;  author: root;  state: Exp;  lines: +14 -10<br />
implemented the driver using one semaphore and one completion.<br />
it can handle many writers as well as many readers .<br />
it will accept first writer then accept one reader now again accept one writer and then again one reader and so on.<br />
still now it is working properly.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.25<br />
date: 2013/07/24 18:58:42;  author: root;  state: Exp;  lines: +53 -18<br />
implemented completion for one writer and many reader.<br />
using init_completion() in O_WRONLY condition of open function.<br />
waiting by wait_for_completion() in read function for putting readers in a small driver&#8217;s queue.<br />
used complete once at the bottom of write and then afterward at the bottom of read call to allow other readers to read.<br />
working successfully till now.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.24<br />
date: 2013/07/23 12:40:18;  author: root;  state: Exp;  lines: +35 -9<br />
using two semaphores ,one to control read and secound to control writing over the scull.<br />
in this in starting one writer is essential and after writing one reader is essential to proceed.<br />
tested for two writing apps and two reading applications .<br />
till now it is working successfully.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.23<br />
date: 2013/07/23 06:26:06;  author: root;  state: Exp;  lines: +4 -10<br />
move sem_init() from open_file() to the function setup_struct_cdev().<br />
here semaphore will initialize for each &amp; every device at the starting.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.22<br />
date: 2013/07/22 17:17:13;  author: root;  state: Exp;  lines: +8 -2<br />
implemented semaphore in kernel level.<br />
using sema_init(),down() in open function,it will make down to semaphore only in O_WRONLY because i am recently controlling the write calls from two diffrent applications.<br />
making up() after performing write function in scull_write().<br />
working properly till now.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.21<br />
date: 2013/07/22 07:55:54;  author: root;  state: Exp;  lines: +2 -2<br />
checked new version to read and trim.<br />
it is working successfully.<br />
i checked it upto 27 quantums to read and trim quantum by quantum.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.20<br />
date: 2013/07/22 07:23:59;  author: root;  state: Exp;  lines: +230 -28<br />
this is successfully trimming all the allocated space to the device when we open it for writing next time.<br />
i have also written a new version of read which will read and trim only quantums one by one.<br />
read trim is not tested yet.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.19<br />
date: 2013/07/19 11:07:56;  author: root;  state: Exp;  lines: +115 -8<br />
implemented scull_trim function properly.<br />
when we open same file in the write mode again then it trim all the data.<br />
means in this i deallocated the memory of quantums,qsets &amp; scullqsets.<br />
it is working successfully.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.18<br />
date: 2013/07/17 13:59:24;  author: root;  state: Exp;  lines: +0 -3<br />
three waste lines deleted .<br />
checked also to add many scullqsets with the previously allocated memory,that was less to write the new request by application.<br />
working successfully.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.17<br />
date: 2013/07/17 13:05:14;  author: root;  state: Exp;  lines: +54 -7<br />
successfully adding some memory when application gives more no. of characters than previously write call after g some positions.<br />
can add some quantums in the previously allocated memory.<br />
till now wprking successfully.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.16<br />
date: 2013/07/16 13:54:00;  author: root;  state: Exp;  lines: +2 -2<br />
working for lseek of more than one quantums also .<br />
till now driver can lseek before write after write .<br />
results are comming correct.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.15<br />
date: 2013/07/16 13:03:18;  author: root;  state: Exp;  lines: +29 -25<br />
working for write ,then again write some data after 5 positions.<br />
reading the whole data after two write operations .<br />
checked only for less than 8 bytes to append.<br />
working successfully till now.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.14<br />
date: 2013/07/16 11:21:28;  author: root;  state: Exp;  lines: +72 -14<br />
performing lseek by any no. of positions successfully.<br />
written only for SEEK_SET.<br />
performed lseek before write &amp; at the time of read operations.<br />
till now it is working properly.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.13<br />
date: 2013/07/16 05:17:19;  author: root;  state: Exp;  lines: +52 -25<br />
implemented lseek when we read after writing to the quantums.<br />
only SEEK_SET implemented in the scull_lseek.<br />
it can seek within the quantum , inter quantum &amp; inter scullqset.<br />
till now it is working correctly.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.12<br />
date: 2013/07/15 07:39:03;  author: root;  state: Exp;  lines: +23 -4<br />
coming in different case in scull_lseek according to the request of application.<br />
defined variable new_position to return the value to application &amp; to store the new position after lseek operation in scull_lseek.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.11<br />
date: 2013/07/15 06:28:03;  author: root;  state: Exp;  lines: +34 -15<br />
add scull_lseek() to seek the cursor position according to the lseek call in the app.c.<br />
printing offset position &amp; offset type correctly.<br />
working successfully till now.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.10<br />
date: 2013/07/11 15:05:36;  author: root;  state: Exp;  lines: +36 -8<br />
gave response to read call of application.<br />
scull_read() function is taking request of read call.<br />
use copy_to_user() function to copy no. of bytes requested by application from kernel space i.e quantums to the user buffer.<br />
rbuff is our user buffer in our case.<br />
successfully jumping from one scullqset to another when one scullqset fills.<br />
overall successfully writing to user buffer is performing.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.9<br />
date: 2013/07/11 12:09:24;  author: root;  state: Exp;  lines: +40 -2<br />
to read call driver is comming in scull<br />
scull_read().<br />
here copy_to_user() is working properly only to write first quantum from kernel space to user buffer i.e rbuff in my case.<br />
it is successfully writing upto this.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.8<br />
date: 2013/07/11 10:48:47;  author: root;  state: Exp;  lines: +47 -8<br />
in scull_write(),use copy_from_user() to copy data from user buffer i.e wbuff in our case to the quantums that was allocated.<br />
also after copying data from ubuff to kernel buffer i.e quantums i link the fscullqset with the scullqset of the sculldev that was stored in the filep-&gt;private_data .<br />
till now it is successfully working.<br />
it can also move from one scullqset to next when all the quantums of the present scullqset fills.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.7<br />
date: 2013/07/10 10:20:09;  author: root;  state: Exp;  lines: +11 -8<br />
in create_scullqset(),make fscullqset-&gt;next = NULL.<br />
sometimes without doing this result in kernel crash in create_quantum().<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.6<br />
date: 2013/07/10 07:40:20;  author: root;  state: Exp;  lines: +215 -3<br />
declaire variable noq &amp; nosqs for no. of quantum &amp; no. of scullqset respectively.<br />
from the given info. in header ,found the value of noq &amp; nosqs.<br />
now to create nosqs called function create_scullqset(), &amp;to create no. of qsets i called function create_qset() .<br />
at last i called create_quantum() to create requirted no. of quantums.<br />
value in size comes from application app.c ,i.e 3rd argument of write.<br />
till now working successfully.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.5<br />
date: 2013/07/08 11:15:20;  author: emblogic;  state: Exp;  lines: +97 -18<br />
defined read &amp; write function for reading &amp; writing to &amp; from the kernel buffer to user space buffer.<br />
only control is going to read &amp; write when called by application .<br />
noting is performing in the read &amp; write function.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.4<br />
date: 2013/07/08 11:14:01;  author: emblogic;  state: Exp;  lines: +0 -3<br />
2 lines deleted.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.3<br />
date: 2013/07/08 11:12:58;  author: emblogic;  state: Exp;  lines: +2 -0<br />
2 lines added.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2<br />
date: 2013/07/02 12:25:03;  author: root;  state: Exp;  lines: +57 -7<br />
branches:  1.2.1;<br />
driver comming in the open_file function after receiving the open call from the application ,app.c.<br />
initialize struct Sculldev elements like qset_size,quantum_size,device_size &amp; data_size.<br />
added open_file() &amp; close_file() function to give response yo the open &amp; close call of app.c program.<br />
in script ,we make node to interface b/w US &amp; KS by using mknod command.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1<br />
date: 2013/07/02 08:50:13;  author: root;  state: Exp;<br />
Initial revision<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2.1.1<br />
date: 2013/07/05 06:49:09;  author: emblogic;  state: Exp;  lines: +48 -17<br />
in open_file function i use container_of() function to map the machine memory &amp; device memory.<br />
this function return address of that mapped memory whis i am storing in the lsculldev i.e pointer to struct Sculldev.<br />
now this address is put in the private data of struct file .<br />
now i check the requested permission by anding the f_flags member of struct file with O_ACCMODE .<br />
now accordingly control goes to the scull_trim function.<br />
=============================================================================</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/08/avtar-singh-e-30-01-30-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Avtar Singh E-30.01.30</title>
		<link>https://www.emblogic.com/blog/07/avtar-singh-e-30-01-30-6/</link>
		<comments>https://www.emblogic.com/blog/07/avtar-singh-e-30-01-30-6/#comments</comments>
		<pubDate>Mon, 29 Jul 2013 12:26:38 +0000</pubDate>
		<dc:creator><![CDATA[Avtar Singh]]></dc:creator>
				<category><![CDATA[Character Driver]]></category>
		<category><![CDATA[to pravjot sir]]></category>

		<guid isPermaLink="false">http://www.emblogic.com/blog/?p=6958</guid>
		<description><![CDATA[RCS file: new_lkm.c,v Working file: new_lkm.c head: 1.29 branch: locks: strict root: 1.29 access list: symbolic names: keyword substitution: kv total revisions: 30;    selected revisions: 30 description: in this i register many no. of devices that we can provide at &#8230; <a href="https://www.emblogic.com/blog/07/avtar-singh-e-30-01-30-6/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>RCS file: new_lkm.c,v<br />
Working file: new_lkm.c<br />
head: 1.29<br />
branch:<br />
locks: strict<br />
root: 1.29<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 30;    selected revisions: 30<br />
description:<br />
in this i register many no. of devices that we can provide at the time of insmod as command line argument.<br />
use setup_struct_cdev() function i.e user defined to setup of the struct cdev,in this we use cdev_init() &amp; cdev_add().<br />
in cleanup we use cdev_del to delete the cdev setup for all devices.<br />
also used kmalloc() &amp; kfree() to allocate &amp; deallocate the memory to scull_dev (pointer of struct Sculldev).<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.29    locked by: root;<br />
date: 2013/07/29 12:20:41;  author: root;  state: Exp;  lines: +31 -10<br />
used create_proc_read_entry successfully.<br />
write the information of the device when we open the /proc entry of device.<br />
used off variable to print the data on page.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.28<br />
date: 2013/07/28 18:02:06;  author: root;  state: Exp;  lines: +17 -5<br />
implemented create_read_proc_entry successfully.<br />
now device entry in /proc mapped with the my function named read_proc in the driver(new_lkm.c).<br />
it provide the information about the attributes of the sculldev or device like device name,device size,etc..<br />
some questions is still in mind<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.27<br />
date: 2013/07/28 16:14:45;  author: root;  state: Exp;  lines: +43 -6<br />
implemented create_proc_read_entry() in very simple way.<br />
able to print any string to the page in read_proc function using sprintf().<br />
till now working.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.26<br />
date: 2013/07/26 06:54:01;  author: root;  state: Exp;  lines: +14 -10<br />
implemented the driver using one semaphore and one completion.<br />
it can handle many writers as well as many readers .<br />
it will accept first writer then accept one reader now again accept one writer and then again one reader and so on.<br />
still now it is working properly.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.25<br />
date: 2013/07/24 18:58:42;  author: root;  state: Exp;  lines: +53 -18<br />
implemented completion for one writer and many reader.<br />
using init_completion() in O_WRONLY condition of open function.<br />
waiting by wait_for_completion() in read function for putting readers in a small driver&#8217;s queue.<br />
used complete once at the bottom of write and then afterward at the bottom of read call to allow other readers to read.<br />
working successfully till now.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.24<br />
date: 2013/07/23 12:40:18;  author: root;  state: Exp;  lines: +35 -9<br />
using two semaphores ,one to control read and secound to control writing over the scull.<br />
in this in starting one writer is essential and after writing one reader is essential to proceed.<br />
tested for two writing apps and two reading applications .<br />
till now it is working successfully.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.23<br />
date: 2013/07/23 06:26:06;  author: root;  state: Exp;  lines: +4 -10<br />
move sem_init() from open_file() to the function setup_struct_cdev().<br />
here semaphore will initialize for each &amp; every device at the starting.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.22<br />
date: 2013/07/22 17:17:13;  author: root;  state: Exp;  lines: +8 -2<br />
implemented semaphore in kernel level.<br />
using sema_init(),down() in open function,it will make down to semaphore only in O_WRONLY because i am recently controlling the write calls from two diffrent applications.<br />
making up() after performing write function in scull_write().<br />
working properly till now.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.21<br />
date: 2013/07/22 07:55:54;  author: root;  state: Exp;  lines: +2 -2<br />
checked new version to read and trim.<br />
it is working successfully.<br />
i checked it upto 27 quantums to read and trim quantum by quantum.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.20<br />
date: 2013/07/22 07:23:59;  author: root;  state: Exp;  lines: +230 -28<br />
this is successfully trimming all the allocated space to the device when we open it for writing next time.<br />
i have also written a new version of read which will read and trim only quantums one by one.<br />
read trim is not tested yet.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.19<br />
date: 2013/07/19 11:07:56;  author: root;  state: Exp;  lines: +115 -8<br />
implemented scull_trim function properly.<br />
when we open same file in the write mode again then it trim all the data.<br />
means in this i deallocated the memory of quantums,qsets &amp; scullqsets.<br />
it is working successfully.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.18<br />
date: 2013/07/17 13:59:24;  author: root;  state: Exp;  lines: +0 -3<br />
three waste lines deleted .<br />
checked also to add many scullqsets with the previously allocated memory,that was less to write the new request by application.<br />
working successfully.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.17<br />
date: 2013/07/17 13:05:14;  author: root;  state: Exp;  lines: +54 -7<br />
successfully adding some memory when application gives more no. of characters than previously write call after g some positions.<br />
can add some quantums in the previously allocated memory.<br />
till now wprking successfully.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.16<br />
date: 2013/07/16 13:54:00;  author: root;  state: Exp;  lines: +2 -2<br />
working for lseek of more than one quantums also .<br />
till now driver can lseek before write after write .<br />
results are comming correct.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.15<br />
date: 2013/07/16 13:03:18;  author: root;  state: Exp;  lines: +29 -25<br />
working for write ,then again write some data after 5 positions.<br />
reading the whole data after two write operations .<br />
checked only for less than 8 bytes to append.<br />
working successfully till now.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.14<br />
date: 2013/07/16 11:21:28;  author: root;  state: Exp;  lines: +72 -14<br />
performing lseek by any no. of positions successfully.<br />
written only for SEEK_SET.<br />
performed lseek before write &amp; at the time of read operations.<br />
till now it is working properly.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.13<br />
date: 2013/07/16 05:17:19;  author: root;  state: Exp;  lines: +52 -25<br />
implemented lseek when we read after writing to the quantums.<br />
only SEEK_SET implemented in the scull_lseek.<br />
it can seek within the quantum , inter quantum &amp; inter scullqset.<br />
till now it is working correctly.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.12<br />
date: 2013/07/15 07:39:03;  author: root;  state: Exp;  lines: +23 -4<br />
coming in different case in scull_lseek according to the request of application.<br />
defined variable new_position to return the value to application &amp; to store the new position after lseek operation in scull_lseek.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.11<br />
date: 2013/07/15 06:28:03;  author: root;  state: Exp;  lines: +34 -15<br />
add scull_lseek() to seek the cursor position according to the lseek call in the app.c.<br />
printing offset position &amp; offset type correctly.<br />
working successfully till now.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.10<br />
date: 2013/07/11 15:05:36;  author: root;  state: Exp;  lines: +36 -8<br />
gave response to read call of application.<br />
scull_read() function is taking request of read call.<br />
use copy_to_user() function to copy no. of bytes requested by application from kernel space i.e quantums to the user buffer.<br />
rbuff is our user buffer in our case.<br />
successfully jumping from one scullqset to another when one scullqset fills.<br />
overall successfully writing to user buffer is performing.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.9<br />
date: 2013/07/11 12:09:24;  author: root;  state: Exp;  lines: +40 -2<br />
to read call driver is comming in scull<br />
scull_read().<br />
here copy_to_user() is working properly only to write first quantum from kernel space to user buffer i.e rbuff in my case.<br />
it is successfully writing upto this.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.8<br />
date: 2013/07/11 10:48:47;  author: root;  state: Exp;  lines: +47 -8<br />
in scull_write(),use copy_from_user() to copy data from user buffer i.e wbuff in our case to the quantums that was allocated.<br />
also after copying data from ubuff to kernel buffer i.e quantums i link the fscullqset with the scullqset of the sculldev that was stored in the filep-&gt;private_data .<br />
till now it is successfully working.<br />
it can also move from one scullqset to next when all the quantums of the present scullqset fills.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.7<br />
date: 2013/07/10 10:20:09;  author: root;  state: Exp;  lines: +11 -8<br />
in create_scullqset(),make fscullqset-&gt;next = NULL.<br />
sometimes without doing this result in kernel crash in create_quantum().<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.6<br />
date: 2013/07/10 07:40:20;  author: root;  state: Exp;  lines: +215 -3<br />
declaire variable noq &amp; nosqs for no. of quantum &amp; no. of scullqset respectively.<br />
from the given info. in header ,found the value of noq &amp; nosqs.<br />
now to create nosqs called function create_scullqset(), &amp;to create no. of qsets i called function create_qset() .<br />
at last i called create_quantum() to create requirted no. of quantums.<br />
value in size comes from application app.c ,i.e 3rd argument of write.<br />
till now working successfully.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.5<br />
date: 2013/07/08 11:15:20;  author: emblogic;  state: Exp;  lines: +97 -18<br />
defined read &amp; write function for reading &amp; writing to &amp; from the kernel buffer to user space buffer.<br />
only control is going to read &amp; write when called by application .<br />
noting is performing in the read &amp; write function.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.4<br />
date: 2013/07/08 11:14:01;  author: emblogic;  state: Exp;  lines: +0 -3<br />
2 lines deleted.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.3<br />
date: 2013/07/08 11:12:58;  author: emblogic;  state: Exp;  lines: +2 -0<br />
2 lines added.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2<br />
date: 2013/07/02 12:25:03;  author: root;  state: Exp;  lines: +57 -7<br />
branches:  1.2.1;<br />
driver comming in the open_file function after receiving the open call from the application ,app.c.<br />
initialize struct Sculldev elements like qset_size,quantum_size,device_size &amp; data_size.<br />
added open_file() &amp; close_file() function to give response yo the open &amp; close call of app.c program.<br />
in script ,we make node to interface b/w US &amp; KS by using mknod command.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1<br />
date: 2013/07/02 08:50:13;  author: root;  state: Exp;<br />
Initial revision<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2.1.1<br />
date: 2013/07/05 06:49:09;  author: emblogic;  state: Exp;  lines: +48 -17<br />
in open_file function i use container_of() function to map the machine memory &amp; device memory.<br />
this function return address of that mapped memory whis i am storing in the lsculldev i.e pointer to struct Sculldev.<br />
now this address is put in the private data of struct file .<br />
now i check the requested permission by anding the f_flags member of struct file with O_ACCMODE .<br />
now accordingly control goes to the scull_trim function.<br />
=============================================================================</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/07/avtar-singh-e-30-01-30-6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Avtar Singh E-30.01.30</title>
		<link>https://www.emblogic.com/blog/07/avtar-singh-e-30-01-30-5/</link>
		<comments>https://www.emblogic.com/blog/07/avtar-singh-e-30-01-30-5/#comments</comments>
		<pubDate>Sat, 20 Jul 2013 06:30:32 +0000</pubDate>
		<dc:creator><![CDATA[Avtar Singh]]></dc:creator>
				<category><![CDATA[Character Driver]]></category>
		<category><![CDATA[to pravjot sir]]></category>

		<guid isPermaLink="false">http://www.emblogic.com/blog/?p=6869</guid>
		<description><![CDATA[INTRODUCTION: Device driver is basically a module(piece of code) used to make possible the communication between hardware and application like VLC media player,firefox,USB devices etc.So device driver is used to drive the hardware according to the application.Different type of applications &#8230; <a href="https://www.emblogic.com/blog/07/avtar-singh-e-30-01-30-5/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>INTRODUCTION:<br />
Device driver is basically a module(piece of code) used to make possible the communication between hardware and application like VLC media player,firefox,USB devices etc.So device driver is used to drive the hardware according to the application.Different type of applications require different type of drivers like USB driver can&#8217;t work for VLC media player and vice-versa.<br />
I think the need of using device drivers is to increase the functionality of kernel.We use the driver as LKM(Loadable Kernel Module) to make our kernel less bulky in size &amp; also it is not essential to keep driver present in the kernel until system is power on.<br />
I am working on Character Driver from last few days.In this article I am going to discuss what i know about character driver briefly.<br />
Character driver sends the data byte by byte to the kernel buffer and user buffer when application give call of write and read respectively.<br />
Now as I have to make my driver capable of directly handshake with the kernel so it was essential to work in kernel space instead of user space,so i have to use the kernel libraries(like kernel.h,init.h,fs.h etc..) instead of glibc libraries(like stdio.h,stdlib.h,fcntl.h etc&#8230;).</p>
<p>DEVICE DRIVER IMPLEMENTATION ROUTE MAP:<br />
I firstly used two predefined macros named as module_init(entry_function) and module_exit(exit_function) as entrance point as main() in user space and exit point respectively.In this entry_function and exit_function is written by me.So after executing module_exit execution will start from my function where I have to specify the major number and name of our driver,capacity to handle maximum number of device at a time and maximun memory of the driver. I am firstly allocating major number to my driver which is basically a highest possible integer value between 0 to 255 by which our driver will be known in the kernel like other device drivers as stored in /proc/devices file.We can select major number for our driver from prevoiusly mentioned path but generally we privilege kernel to select major number because kernel will allocate it dynamically.This can be done with the register_chrdev_region() function call defined in fs.h kernel library.This will give the result of 32 bit(12 + 20 bit) at the address as give in first argument of call.Now later on i have used that the first 12 bit i.e major number but i specify my own minor number generally 0 to upward in MKDEV() macro defined in kdev_t.h.Now used the cdev_init() and cdev_add() to initialize and add the cdev structure for our device which will contains the device specifications.Now i initialize the sculldev structure(user defined structure that contain all information of the driver) to add the maximum memory of device and the partition of that memory like size of one quantum etc.<br />
Now I have open,write,read,lseek and close file till now.So i have mapped these system calls in struct file_operations structure with my respective open,write,read,lseek and close functions according to prototype defined in &lt;fs.h&gt; kernel header file that will now handles the application calls instead of drivers of the OS.<br />
But Before doing anything we have to map our allocated memory with the device memory this is done in the open function of driver with<br />
container_of(ptr,type,member) in which first argument is pointer to i_cdev member of struct inode,2nd argument is user defined structure which contains pointer to struct cdev and third argument is pointer to struct cdev.Actually struct cdev is actual representation of the device.Now return of container_of will be starting address of mapped memory that we will use to read and write on device and i store this address in the private_data of the struct file structure defined in fs.h library.<br />
After doing this now i have made my read,write and lseek function compatible with the almost all type of requests from application.In this write function will store the written data in own quantum  when write request comes and give back that data according to the read request of application.I have also handled the single multi threaded application.</p>
<p>Now to test this driver firstly compile and insert our module in running kernel dynamically.This is done with command insmod &lt;lkm.ko&gt; on shell here lkm is my name of c file of driver.Compilation of the file should be by Makefile. And to make communication possible between application application and device driver,we require node in Virtual File System(VFS). Node is created by the commend &#8220;mknod node_name c major no. minor no.&#8221;,here c is to specify that is making for character driver.<br />
After testing we should have to remove the module from kernel with command &#8220;rmmod&#8221; like rmmod lkm to free the allocated major number.<br />
That was all i have done with character driver.</p>
<p>THANK YOU!!!</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/07/avtar-singh-e-30-01-30-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pointers.</title>
		<link>https://www.emblogic.com/blog/07/pointers-4/</link>
		<comments>https://www.emblogic.com/blog/07/pointers-4/#comments</comments>
		<pubDate>Fri, 19 Jul 2013 20:21:49 +0000</pubDate>
		<dc:creator><![CDATA[Vikram Sharma]]></dc:creator>
				<category><![CDATA[Data Structures with C]]></category>
		<category><![CDATA[to pravjot sir]]></category>
		<category><![CDATA[To Sidhdharth Sir]]></category>

		<guid isPermaLink="false">http://www.emblogic.com/blog/?p=6864</guid>
		<description><![CDATA[#include&#60;stdio.h&#62; #include&#60;stdlib.h&#62; int main() { void *ptr; char i; ptr = malloc(sizeof(int ) * 5); for(i = 0; i&#60;(sizeof(int) * 5); i++) { *(int *)(ptr + i) = i; printf(&#8221; ptr + %d = %p\t %d\n&#8221;, i, (ptr + i &#8230; <a href="https://www.emblogic.com/blog/07/pointers-4/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div>
<p>#include&lt;stdio.h&gt;<br />
#include&lt;stdlib.h&gt;</p>
<p>int main()<br />
{<br />
void *ptr;</p>
<p>char i;</p>
<p>ptr = malloc(sizeof(int ) * 5);</p>
<p>for(i = 0; i&lt;(sizeof(int) * 5); i++)<br />
{<br />
*(int *)(ptr + i) = i;<br />
printf(&#8221; ptr + %d = %p\t %d\n&#8221;, i, (ptr + i &#8211; 1), *(int *)(ptr + i &#8211; 1));<br />
}<br />
return 0;<br />
}</p>
</div>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/07/pointers-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Avtar Singh E 30.01.30</title>
		<link>https://www.emblogic.com/blog/07/avtar-singh-e-30-01-30-4/</link>
		<comments>https://www.emblogic.com/blog/07/avtar-singh-e-30-01-30-4/#comments</comments>
		<pubDate>Fri, 19 Jul 2013 14:10:55 +0000</pubDate>
		<dc:creator><![CDATA[Avtar Singh]]></dc:creator>
				<category><![CDATA[Character Driver]]></category>
		<category><![CDATA[to pravjot sir]]></category>

		<guid isPermaLink="false">http://www.emblogic.com/blog/?p=6859</guid>
		<description><![CDATA[RCS file: new_lkm.c,v Working file: new_lkm.c head: 1.19 branch: locks: strict root: 1.19 access list: symbolic names: keyword substitution: kv total revisions: 20;    selected revisions: 20 description: in this i register many no. of devices that we can provide at &#8230; <a href="https://www.emblogic.com/blog/07/avtar-singh-e-30-01-30-4/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>RCS file: new_lkm.c,v<br />
Working file: new_lkm.c<br />
head: 1.19<br />
branch:<br />
locks: strict<br />
root: 1.19<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 20;    selected revisions: 20<br />
description:<br />
in this i register many no. of devices that we can provide at the time of insmod as command line argument.<br />
use setup_struct_cdev() function i.e user defined to setup of the struct cdev,in this we use cdev_init() &amp; cdev_add().<br />
in cleanup we use cdev_del to delete the cdev setup for all devices.<br />
also used kmalloc() &amp; kfree() to allocate &amp; deallocate the memory to scull_dev (pointer of struct Sculldev).<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.19    locked by: root;<br />
date: 2013/07/19 11:07:56;  author: root;  state: Exp;  lines: +115 -8<br />
implemented scull_trim function properly.<br />
when we open same file in the write mode again then it trim all the data.<br />
means in this i deallocated the memory of quantums,qsets &amp; scullqsets.<br />
it is working successfully.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.18<br />
date: 2013/07/17 13:59:24;  author: root;  state: Exp;  lines: +0 -3<br />
three waste lines deleted .<br />
checked also to add many scullqsets with the previously allocated memory,that was less to write the new request by application.<br />
working successfully.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.17<br />
date: 2013/07/17 13:05:14;  author: root;  state: Exp;  lines: +54 -7<br />
successfully adding some memory when application gives more no. of characters than previously write call after g some positions.<br />
can add some quantums in the previously allocated memory.<br />
till now wprking successfully.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.16<br />
date: 2013/07/16 13:54:00;  author: root;  state: Exp;  lines: +2 -2<br />
working for lseek of more than one quantums also .<br />
till now driver can lseek before write after write .<br />
results are comming correct.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.15<br />
date: 2013/07/16 13:03:18;  author: root;  state: Exp;  lines: +29 -25<br />
working for write ,then again write some data after 5 positions.<br />
reading the whole data after two write operations .<br />
checked only for less than 8 bytes to append.<br />
working successfully till now.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.14<br />
date: 2013/07/16 11:21:28;  author: root;  state: Exp;  lines: +72 -14<br />
performing lseek by any no. of positions successfully.<br />
written only for SEEK_SET.<br />
performed lseek before write &amp; at the time of read operations.<br />
till now it is working properly.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.13<br />
date: 2013/07/16 05:17:19;  author: root;  state: Exp;  lines: +52 -25<br />
implemented lseek when we read after writing to the quantums.<br />
only SEEK_SET implemented in the scull_lseek.<br />
it can seek within the quantum , inter quantum &amp; inter scullqset.<br />
till now it is working correctly.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.12<br />
date: 2013/07/15 07:39:03;  author: root;  state: Exp;  lines: +23 -4<br />
coming in different case in scull_lseek according to the request of application.<br />
defined variable new_position to return the value to application &amp; to store the new position after lseek operation in scull_lseek.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.11<br />
date: 2013/07/15 06:28:03;  author: root;  state: Exp;  lines: +34 -15<br />
add scull_lseek() to seek the cursor position according to the lseek call in the app.c.<br />
printing offset position &amp; offset type correctly.<br />
working successfully till now.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.10<br />
date: 2013/07/11 15:05:36;  author: root;  state: Exp;  lines: +36 -8<br />
gave response to read call of application.<br />
scull_read() function is taking request of read call.<br />
use copy_to_user() function to copy no. of bytes requested by application from kernel space i.e quantums to the user buffer.<br />
rbuff is our user buffer in our case.<br />
successfully jumping from one scullqset to another when one scullqset fills.<br />
overall successfully writing to user buffer is performing.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.9<br />
date: 2013/07/11 12:09:24;  author: root;  state: Exp;  lines: +40 -2<br />
to read call driver is comming in scull<br />
scull_read().<br />
here copy_to_user() is working properly only to write first quantum from kernel space to user buffer i.e rbuff in my case.<br />
it is successfully writing upto this.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.8<br />
date: 2013/07/11 10:48:47;  author: root;  state: Exp;  lines: +47 -8<br />
in scull_write(),use copy_from_user() to copy data from user buffer i.e wbuff in our case to the quantums that was allocated.<br />
also after copying data from ubuff to kernel buffer i.e quantums i link the fscullqset with the scullqset of the sculldev that was stored in the filep-&gt;private_data .<br />
till now it is successfully working.<br />
it can also move from one scullqset to next when all the quantums of the present scullqset fills.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.7<br />
date: 2013/07/10 10:20:09;  author: root;  state: Exp;  lines: +11 -8<br />
in create_scullqset(),make fscullqset-&gt;next = NULL.<br />
sometimes without doing this result in kernel crash in create_quantum().<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.6<br />
date: 2013/07/10 07:40:20;  author: root;  state: Exp;  lines: +215 -3<br />
declaire variable noq &amp; nosqs for no. of quantum &amp; no. of scullqset respectively.<br />
from the given info. in header ,found the value of noq &amp; nosqs.<br />
now to create nosqs called function create_scullqset(), &amp;to create no. of qsets i called function create_qset() .<br />
at last i called create_quantum() to create requirted no. of quantums.<br />
value in size comes from application app.c ,i.e 3rd argument of write.<br />
till now working successfully.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.5<br />
date: 2013/07/08 11:15:20;  author: emblogic;  state: Exp;  lines: +97 -18<br />
defined read &amp; write function for reading &amp; writing to &amp; from the kernel buffer to user space buffer.<br />
only control is going to read &amp; write when called by application .<br />
noting is performing in the read &amp; write function.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.4<br />
date: 2013/07/08 11:14:01;  author: emblogic;  state: Exp;  lines: +0 -3<br />
2 lines deleted.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.3<br />
date: 2013/07/08 11:12:58;  author: emblogic;  state: Exp;  lines: +2 -0<br />
2 lines added.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2<br />
date: 2013/07/02 12:25:03;  author: root;  state: Exp;  lines: +57 -7<br />
branches:  1.2.1;<br />
driver comming in the open_file function after receiving the open call from the application ,app.c.<br />
initialize struct Sculldev elements like qset_size,quantum_size,device_size &amp; data_size.<br />
added open_file() &amp; close_file() function to give response yo the open &amp; close call of app.c program.<br />
in script ,we make node to interface b/w US &amp; KS by using mknod command.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1<br />
date: 2013/07/02 08:50:13;  author: root;  state: Exp;<br />
Initial revision<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2.1.1<br />
date: 2013/07/05 06:49:09;  author: emblogic;  state: Exp;  lines: +48 -17<br />
in open_file function i use container_of() function to map the machine memory &amp; device memory.<br />
this function return address of that mapped memory whis i am storing in the lsculldev i.e pointer to struct Sculldev.<br />
now this address is put in the private data of struct file .<br />
now i check the requested permission by anding the f_flags member of struct file with O_ACCMODE .<br />
now accordingly control goes to the scull_trim function.<br />
=============================================================================</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/07/avtar-singh-e-30-01-30-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Avtar Singh E-30.01.30</title>
		<link>https://www.emblogic.com/blog/07/avtar-singh-e-30-01-30-3/</link>
		<comments>https://www.emblogic.com/blog/07/avtar-singh-e-30-01-30-3/#comments</comments>
		<pubDate>Thu, 18 Jul 2013 13:56:51 +0000</pubDate>
		<dc:creator><![CDATA[Avtar Singh]]></dc:creator>
				<category><![CDATA[Character Driver]]></category>
		<category><![CDATA[to pravjot sir]]></category>

		<guid isPermaLink="false">http://www.emblogic.com/blog/?p=6843</guid>
		<description><![CDATA[RCS file: new_lkm.c,v Working file: new_lkm.c head: 1.18 branch: locks: strict root: 1.18 access list: symbolic names: keyword substitution: kv total revisions: 19;    selected revisions: 19 description: in this i register many no. of devices that we can provide at &#8230; <a href="https://www.emblogic.com/blog/07/avtar-singh-e-30-01-30-3/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>RCS file: new_lkm.c,v<br />
Working file: new_lkm.c<br />
head: 1.18<br />
branch:<br />
locks: strict<br />
root: 1.18<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 19;    selected revisions: 19<br />
description:<br />
in this i register many no. of devices that we can provide at the time of insmod as command line argument.<br />
use setup_struct_cdev() function i.e user defined to setup of the struct cdev,in this we use cdev_init() &amp; cdev_add().<br />
in cleanup we use cdev_del to delete the cdev setup for all devices.<br />
also used kmalloc() &amp; kfree() to allocate &amp; deallocate the memory to scull_dev (pointer of struct Sculldev).<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.18    locked by: root;<br />
date: 2013/07/17 13:59:24;  author: root;  state: Exp;  lines: +0 -3<br />
three waste lines deleted .<br />
checked also to add many scullqsets with the previously allocated memory,that was less to write the new request by application.<br />
working successfully.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.17<br />
date: 2013/07/17 13:05:14;  author: root;  state: Exp;  lines: +54 -7<br />
successfully adding some memory when application gives more no. of characters than previously write call after g some positions.<br />
can add some quantums in the previously allocated memory.<br />
till now wprking successfully.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.16<br />
date: 2013/07/16 13:54:00;  author: root;  state: Exp;  lines: +2 -2<br />
working for lseek of more than one quantums also .<br />
till now driver can lseek before write after write .<br />
results are comming correct.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.15<br />
date: 2013/07/16 13:03:18;  author: root;  state: Exp;  lines: +29 -25<br />
working for write ,then again write some data after 5 positions.<br />
reading the whole data after two write operations .<br />
checked only for less than 8 bytes to append.<br />
working successfully till now.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.14<br />
date: 2013/07/16 11:21:28;  author: root;  state: Exp;  lines: +72 -14<br />
performing lseek by any no. of positions successfully.<br />
written only for SEEK_SET.<br />
performed lseek before write &amp; at the time of read operations.<br />
till now it is working properly.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.13<br />
date: 2013/07/16 05:17:19;  author: root;  state: Exp;  lines: +52 -25<br />
implemented lseek when we read after writing to the quantums.<br />
only SEEK_SET implemented in the scull_lseek.<br />
it can seek within the quantum , inter quantum &amp; inter scullqset.<br />
till now it is working correctly.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.12<br />
date: 2013/07/15 07:39:03;  author: root;  state: Exp;  lines: +23 -4<br />
coming in different case in scull_lseek according to the request of application.<br />
defined variable new_position to return the value to application &amp; to store the new position after lseek operation in scull_lseek.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.11<br />
date: 2013/07/15 06:28:03;  author: root;  state: Exp;  lines: +34 -15<br />
add scull_lseek() to seek the cursor position according to the lseek call in the app.c.<br />
printing offset position &amp; offset type correctly.<br />
working successfully till now.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.10<br />
date: 2013/07/11 15:05:36;  author: root;  state: Exp;  lines: +36 -8<br />
gave response to read call of application.<br />
scull_read() function is taking request of read call.<br />
use copy_to_user() function to copy no. of bytes requested by application from kernel space i.e quantums to the user buffer.<br />
rbuff is our user buffer in our case.<br />
successfully jumping from one scullqset to another when one scullqset fills.<br />
overall successfully writing to user buffer is performing.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.9<br />
date: 2013/07/11 12:09:24;  author: root;  state: Exp;  lines: +40 -2<br />
to read call driver is comming in scull<br />
scull_read().<br />
here copy_to_user() is working properly only to write first quantum from kernel space to user buffer i.e rbuff in my case.<br />
it is successfully writing upto this.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.8<br />
date: 2013/07/11 10:48:47;  author: root;  state: Exp;  lines: +47 -8<br />
in scull_write(),use copy_from_user() to copy data from user buffer i.e wbuff in our case to the quantums that was allocated.<br />
also after copying data from ubuff to kernel buffer i.e quantums i link the fscullqset with the scullqset of the sculldev that was stored in the filep-&gt;private_data .<br />
till now it is successfully working.<br />
it can also move from one scullqset to next when all the quantums of the present scullqset fills.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.7<br />
date: 2013/07/10 10:20:09;  author: root;  state: Exp;  lines: +11 -8<br />
in create_scullqset(),make fscullqset-&gt;next = NULL.<br />
sometimes without doing this result in kernel crash in create_quantum().<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.6<br />
date: 2013/07/10 07:40:20;  author: root;  state: Exp;  lines: +215 -3<br />
declaire variable noq &amp; nosqs for no. of quantum &amp; no. of scullqset respectively.<br />
from the given info. in header ,found the value of noq &amp; nosqs.<br />
now to create nosqs called function create_scullqset(), &amp;to create no. of qsets i called function create_qset() .<br />
at last i called create_quantum() to create requirted no. of quantums.<br />
value in size comes from application app.c ,i.e 3rd argument of write.<br />
till now working successfully.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.5<br />
date: 2013/07/08 11:15:20;  author: emblogic;  state: Exp;  lines: +97 -18<br />
defined read &amp; write function for reading &amp; writing to &amp; from the kernel buffer to user space buffer.<br />
only control is going to read &amp; write when called by application .<br />
noting is performing in the read &amp; write function.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.4<br />
date: 2013/07/08 11:14:01;  author: emblogic;  state: Exp;  lines: +0 -3<br />
2 lines deleted.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.3<br />
date: 2013/07/08 11:12:58;  author: emblogic;  state: Exp;  lines: +2 -0<br />
2 lines added.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2<br />
date: 2013/07/02 12:25:03;  author: root;  state: Exp;  lines: +57 -7<br />
branches:  1.2.1;<br />
driver comming in the open_file function after receiving the open call from the application ,app.c.<br />
initialize struct Sculldev elements like qset_size,quantum_size,device_size &amp; data_size.<br />
added open_file() &amp; close_file() function to give response yo the open &amp; close call of app.c program.<br />
in script ,we make node to interface b/w US &amp; KS by using mknod command.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1<br />
date: 2013/07/02 08:50:13;  author: root;  state: Exp;<br />
Initial revision<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2.1.1<br />
date: 2013/07/05 06:49:09;  author: emblogic;  state: Exp;  lines: +48 -17<br />
in open_file function i use container_of() function to map the machine memory &amp; device memory.<br />
this function return address of that mapped memory whis i am storing in the lsculldev i.e pointer to struct Sculldev.<br />
now this address is put in the private data of struct file .<br />
now i check the requested permission by anding the f_flags member of struct file with O_ACCMODE .<br />
now accordingly control goes to the scull_trim function.<br />
=============================================================================</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/07/avtar-singh-e-30-01-30-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Avtar Singh E-30.01.30</title>
		<link>https://www.emblogic.com/blog/07/avtar-singh-e-30-01-30-2/</link>
		<comments>https://www.emblogic.com/blog/07/avtar-singh-e-30-01-30-2/#comments</comments>
		<pubDate>Tue, 16 Jul 2013 17:46:41 +0000</pubDate>
		<dc:creator><![CDATA[Avtar Singh]]></dc:creator>
				<category><![CDATA[Character Driver]]></category>
		<category><![CDATA[to pravjot sir]]></category>

		<guid isPermaLink="false">http://www.emblogic.com/blog/?p=6812</guid>
		<description><![CDATA[RCS file: new_lkm.c,v Working file: new_lkm.c head: 1.16 branch: locks: strict root: 1.16 access list: symbolic names: keyword substitution: kv total revisions: 17;    selected revisions: 17 description: in this i register many no. of devices that we can provide at &#8230; <a href="https://www.emblogic.com/blog/07/avtar-singh-e-30-01-30-2/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>RCS file: new_lkm.c,v<br />
Working file: new_lkm.c<br />
head: 1.16<br />
branch:<br />
locks: strict<br />
root: 1.16<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 17;    selected revisions: 17<br />
description:<br />
in this i register many no. of devices that we can provide at the time of insmod as command line argument.<br />
use setup_struct_cdev() function i.e user defined to setup of the struct cdev,in this we use cdev_init() &amp; cdev_add().<br />
in cleanup we use cdev_del to delete the cdev setup for all devices.<br />
also used kmalloc() &amp; kfree() to allocate &amp; deallocate the memory to scull_dev (pointer of struct Sculldev).<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.16   locked by: root;<br />
date: 2013/07/16 13:54:00;  author: root;  state: Exp;  lines: +2 -2<br />
working for lseek of more than one quantums also .<br />
till now driver can lseek before write after write .<br />
results are comming correct.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.15<br />
date: 2013/07/16 13:03:18;  author: root;  state: Exp;  lines: +29 -25<br />
working for write ,then again write some data after 5 positions.<br />
reading the whole data after two write operations .<br />
checked only for less than 8 bytes to append.<br />
working successfully till now.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.14<br />
date: 2013/07/16 11:21:28;  author: root;  state: Exp;  lines: +72 -14<br />
performing lseek by any no. of positions successfully.<br />
written only for SEEK_SET.<br />
performed lseek before write &amp; at the time of read operations.<br />
till now it is working properly.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.13<br />
date: 2013/07/16 05:17:19;  author: root;  state: Exp;  lines: +52 -25<br />
implemented lseek when we read after writing to the quantums.<br />
only SEEK_SET implemented in the scull_lseek.<br />
it can seek within the quantum , inter quantum &amp; inter scullqset.<br />
till now it is working correctly.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.12<br />
date: 2013/07/15 07:39:03;  author: root;  state: Exp;  lines: +23 -4<br />
coming in different case in scull_lseek according to the request of application.<br />
defined variable new_position to return the value to application &amp; to store the new position after lseek operation in scull_lseek.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.11<br />
date: 2013/07/15 06:28:03;  author: root;  state: Exp;  lines: +34 -15<br />
add scull_lseek() to seek the cursor position according to the lseek call in the app.c.<br />
printing offset position &amp; offset type correctly.<br />
working successfully till now.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.10<br />
date: 2013/07/11 15:05:36;  author: root;  state: Exp;  lines: +36 -8<br />
gave response to read call of application.<br />
scull_read() function is taking request of read call.<br />
use copy_to_user() function to copy no. of bytes requested by application from kernel space i.e quantums to the user buffer.<br />
rbuff is our user buffer in our case.<br />
successfully jumping from one scullqset to another when one scullqset fills.<br />
overall successfully writing to user buffer is performing.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.9<br />
date: 2013/07/11 12:09:24;  author: root;  state: Exp;  lines: +40 -2<br />
to read call driver is comming in scull<br />
scull_read().<br />
here copy_to_user() is working properly only to write first quantum from kernel space to user buffer i.e rbuff in my case.<br />
it is successfully writing upto this.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.8<br />
date: 2013/07/11 10:48:47;  author: root;  state: Exp;  lines: +47 -8<br />
in scull_write(),use copy_from_user() to copy data from user buffer i.e wbuff in our case to the quantums that was allocated.<br />
also after copying data from ubuff to kernel buffer i.e quantums i link the fscullqset with the scullqset of the sculldev that was stored in the filep-&gt;private_data .<br />
till now it is successfully working.<br />
it can also move from one scullqset to next when all the quantums of the present scullqset fills.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.7<br />
date: 2013/07/10 10:20:09;  author: root;  state: Exp;  lines: +11 -8<br />
in create_scullqset(),make fscullqset-&gt;next = NULL.<br />
sometimes without doing this result in kernel crash in create_quantum().<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.6<br />
date: 2013/07/10 07:40:20;  author: root;  state: Exp;  lines: +215 -3<br />
declaire variable noq &amp; nosqs for no. of quantum &amp; no. of scullqset respectively.<br />
from the given info. in header ,found the value of noq &amp; nosqs.<br />
now to create nosqs called function create_scullqset(), &amp;to create no. of qsets i called function create_qset() .<br />
at last i called create_quantum() to create requirted no. of quantums.<br />
value in size comes from application app.c ,i.e 3rd argument of write.<br />
till now working successfully.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.5<br />
date: 2013/07/08 11:15:20;  author: emblogic;  state: Exp;  lines: +97 -18<br />
defined read &amp; write function for reading &amp; writing to &amp; from the kernel buffer to user space buffer.<br />
only control is going to read &amp; write when called by application .<br />
noting is performing in the read &amp; write function.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.4<br />
date: 2013/07/08 11:14:01;  author: emblogic;  state: Exp;  lines: +0 -3<br />
2 lines deleted.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.3<br />
date: 2013/07/08 11:12:58;  author: emblogic;  state: Exp;  lines: +2 -0<br />
2 lines added.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2<br />
date: 2013/07/02 12:25:03;  author: root;  state: Exp;  lines: +57 -7<br />
branches:  1.2.1;<br />
driver comming in the open_file function after receiving the open call from the application ,app.c.<br />
initialize struct Sculldev elements like qset_size,quantum_size,device_size &amp; data_size.<br />
added open_file() &amp; close_file() function to give response yo the open &amp; close call of app.c program.<br />
in script ,we make node to interface b/w US &amp; KS by using mknod command.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1<br />
date: 2013/07/02 08:50:13;  author: root;  state: Exp;<br />
Initial revision<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2.1.1<br />
date: 2013/07/05 06:49:09;  author: emblogic;  state: Exp;  lines: +48 -17<br />
in open_file function i use container_of() function to map the machine memory &amp; device memory.<br />
this function return address of that mapped memory whis i am storing in the lsculldev i.e pointer to struct Sculldev.<br />
now this address is put in the private data of struct file .<br />
now i check the requested permission by anding the f_flags member of struct file with O_ACCMODE .<br />
now accordingly control goes to the scull_trim function.<br />
=============================================================================</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/07/avtar-singh-e-30-01-30-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>E 30:01:30 Vikram Sharma</title>
		<link>https://www.emblogic.com/blog/07/e-300130-vikram-sharma/</link>
		<comments>https://www.emblogic.com/blog/07/e-300130-vikram-sharma/#comments</comments>
		<pubDate>Tue, 16 Jul 2013 17:35:38 +0000</pubDate>
		<dc:creator><![CDATA[Vikram Sharma]]></dc:creator>
				<category><![CDATA[Character Driver]]></category>
		<category><![CDATA[Device Drivers]]></category>
		<category><![CDATA[to pravjot sir]]></category>

		<guid isPermaLink="false">http://www.emblogic.com/blog/?p=6810</guid>
		<description><![CDATA[CS file: ./ch_d.c,v Working file: ./ch_d.c head: 1.15 branch: locks: strict access list: symbolic names: keyword substitution: kv total revisions: 15;    selected revisions: 15 description: Basic Driver Arch. with cdev initionlized &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- revision 1.15 date: 2013/07/16 23:23:14;  author: vikram;  state: &#8230; <a href="https://www.emblogic.com/blog/07/e-300130-vikram-sharma/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>CS file: ./ch_d.c,v<br />
Working file: ./ch_d.c<br />
head: 1.15<br />
branch:<br />
locks: strict<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 15;    selected revisions: 15<br />
description:<br />
Basic Driver Arch. with cdev initionlized<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.15<br />
date: 2013/07/16 23:23:14;  author: vikram;  state: Exp;  lines: +10 -1<br />
Problem While reading second Qset&#8230;&#8230;.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.14<br />
date: 2013/07/16 21:37:09;  author: vikram;  state: Exp;  lines: +54 -20<br />
problem While Reading Multiple qsets.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.13<br />
date: 2013/07/16 16:27:32;  author: vikram;  state: Exp;  lines: +35 -16<br />
lseek Implemented compltly on Write.<br />
still have to implement for read.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.12<br />
date: 2013/07/15 21:47:38;  author: vikram;  state: Exp;  lines: +9 -5<br />
lseek partially working.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.11<br />
date: 2013/07/15 19:55:12;  author: vikram;  state: Exp;  lines: +69 -5<br />
partially implemented lseek.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.10<br />
date: 2013/07/13 17:56:16;  author: vikram;  state: Exp;  lines: +26 -12<br />
read done for Now.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.9<br />
date: 2013/07/13 15:03:39;  author: vikram;  state: Exp;  lines: +56 -2<br />
my_read mapped and implemented properly.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.8<br />
date: 2013/07/11 22:50:38;  author: vikram;  state: Exp;  lines: +62 -0<br />
mapped my_read&#8230;..copy_to_user, still to be implemented.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.7<br />
date: 2013/07/11 18:14:14;  author: vikram;  state: Exp;  lines: +0 -1<br />
Written 300+ Bytes in ScullDev.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.6<br />
date: 2013/07/11 17:46:13;  author: vikram;  state: Exp;  lines: +113 -7<br />
Written Over Kernel Space.<br />
for multiple quantums.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.5<br />
date: 2013/07/10 17:25:17;  author: vikram;  state: Exp;  lines: +1 -1<br />
create_scullqset Implemented.<br />
create_qset implimented.<br />
create_quantum Implemented<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.4<br />
date: 2013/07/10 15:41:12;  author: vikram;  state: Exp;  lines: +178 -3<br />
create quantum done<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.3<br />
date: 2013/07/08 20:24:35;  author: vikram;  state: Exp;  lines: +80 -3<br />
my_write implemented.<br />
scull_trim implemented.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2<br />
date: 2013/07/05 22:13:30;  author: vikram;  state: Exp;  lines: +32 -2<br />
maped open and release with my_open and my_close.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1<br />
date: 2013/07/04 01:38:08;  author: vikram;  state: Exp;<br />
Initial revision<br />
=============================================================================</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/07/e-300130-vikram-sharma/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>30.1.30: JATINDER KUNAR</title>
		<link>https://www.emblogic.com/blog/07/30-1-30-jatinder-kunar/</link>
		<comments>https://www.emblogic.com/blog/07/30-1-30-jatinder-kunar/#comments</comments>
		<pubDate>Thu, 11 Jul 2013 16:52:22 +0000</pubDate>
		<dc:creator><![CDATA[Jatinder Kumar]]></dc:creator>
				<category><![CDATA[Character Driver]]></category>
		<category><![CDATA[Device Drivers]]></category>
		<category><![CDATA[to pravjot sir]]></category>

		<guid isPermaLink="false">http://www.emblogic.com/blog/?p=6707</guid>
		<description><![CDATA[Implemented the driver fror n number of byte reading and n number of byte writing. Now going to sleep as provjot sir said today &#8230;. go to bed on time. good night. RCS file: lkm.c,v Working file: lkm.c head: 1.17 &#8230; <a href="https://www.emblogic.com/blog/07/30-1-30-jatinder-kunar/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Implemented the driver fror n number of byte reading and n number of byte writing. Now going to sleep as provjot sir said today &#8230;. go to bed on time. good night.<br />
RCS file: lkm.c,v<br />
Working file: lkm.c<br />
head: 1.17<br />
branch:<br />
locks: strict<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 17;    selected revisions: 17<br />
description:<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.17<br />
date: 2013/07/11 16:39:20;  author: jatinder;  state: Exp;  lines: +44 -5<br />
Ipmelemented Scull_read ().<br />
Successfully aabled to read n bytes of data by my driver.<br />
the read algo is same a that of in scull_write.<br />
app successfully read and write via node to drive.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.16<br />
date: 2013/07/11 15:25:43;  author: jatinder;  state: Exp;  lines: +49 -2<br />
fial to open scull_read.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.15<br />
date: 2013/07/11 10:12:17;  author: jatinder;  state: Exp;  lines: +44 -16<br />
Implemented the write for multiple scullqset successfully.<br />
counted lnoq for inner loop for according to remaining bytes.<br />
SO that inner loop never run more then 8 bytes ie onlu for 1 scullqset.<br />
for next scullqset i used my own alogrithim.<br />
preserved size in fnobtw , updted fnobtm and fnobsw .<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.14<br />
date: 2013/07/11 06:39:26;  author: jatinder;  state: Exp;  lines: +11 -4<br />
Implemented copy_from_user fro n number of quauntum .<br />
for this we made our own algorithm.<br />
/.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.13<br />
date: 2013/07/11 06:03:50;  author: jatinder;  state: Exp;  lines: +64 -14<br />
implemented copy_from_user for 1 quantum .<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.12<br />
date: 2013/07/09 10:17:35;  author: jatinder;  state: Exp;  lines: +66 -6<br />
implemented the create_qset for n number of qsets.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.11<br />
date: 2013/07/09 07:34:52;  author: jatinder;  state: Exp;  lines: +25 -11<br />
Implemented create_scullqset() for nosqs .<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.10<br />
date: 2013/07/09 07:18:15;  author: jatinder;  state: Exp;  lines: +61 -0<br />
calculated the no of quantum  and no of scullqset.<br />
implemented the create_scullqset() for creatinf 1 scullqset.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.9<br />
date: 2013/07/08 08:31:27;  author: jatinder;  state: Exp;  lines: +28 -2<br />
Gave the declartion of scull_read() and scull_write().<br />
and in header mapped the read and write funtion to scull_read and sucll_write .<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.8<br />
date: 2013/07/08 07:32:22;  author: jatinder;  state: Exp;  lines: +19 -3<br />
in sucll_trim function we checked for fsculldev and fscullded-&gt;sucllqet that is is NULL or have some value.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.7<br />
date: 2013/07/04 06:51:41;  author: jatinder;  state: Exp;  lines: +61 -15<br />
decaled lsculldev in open routine.<br />
used container_of macro.<br />
save the information given by container_of macro in struct inode&#8217;s private_data member.<br />
call the scull_trim function<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.6</p>
<p>date: 2013/07/03 09:27:59;  author: jatinder;  state: Exp;  lines: +57 -1<br />
gave defination of sucll_open() and scull_realse() .<br />
intialized variable od sculldev for number of nod.<br />
scucessfully opend the file from my driver.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.5<br />
date: 2013/07/03 07:42:02;  author: jatinder;  state: Exp;  lines: +32 -25<br />
used loop scull_setupfunction to add nod number of device<br />
in clenup_func() used nod number of time cdev_del().<br />
and save the major and minor number in tmp.<br />
pssed this tmp in unregister_chrdev_region for unregister the driver<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.4<br />
date: 2013/07/03 06:57:12;  author: jatinder;  state: Exp;  lines: +54 -0<br />
declared scull_setup function.<br />
used cdev_init and cdev_add() in this function.<br />
initialized the members of struct cdev.<br />
in cleanup routine used cdev_del() function .<br />
in cleanup routine always do things in the reverse order wrt initialization routine.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.3<br />
date: 2013/07/03 06:02:39;  author: jatinder;  state: Exp;  lines: +13 -0<br />
used kmalloc for number of node.<br />
and used kfree function in cleanup module.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2<br />
date: 2013/07/03 05:30:46;  author: jatinder;  state: Exp;  lines: +24 -9<br />
used register_chrdev_region function.<br />
call param_module<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1<br />
date: 2013/07/02 19:45:49;  author: jatinder;  state: Exp;<br />
Initial revision<br />
=============================================================================<br />
                                                                                                                                  105,1         Bot</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/07/30-1-30-jatinder-kunar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>30.01.30: JATINDER KUMAR</title>
		<link>https://www.emblogic.com/blog/06/30-01-30-jatinder-kumar/</link>
		<comments>https://www.emblogic.com/blog/06/30-01-30-jatinder-kumar/#comments</comments>
		<pubDate>Sat, 29 Jun 2013 10:09:08 +0000</pubDate>
		<dc:creator><![CDATA[Jatinder Kumar]]></dc:creator>
				<category><![CDATA[Device Drivers]]></category>
		<category><![CDATA[to pravjot sir]]></category>

		<guid isPermaLink="false">http://www.emblogic.com/blog/?p=6641</guid>
		<description><![CDATA[today i made simplest driver hello word . understood lsmod,rmmod,insmod now i am going home]]></description>
				<content:encoded><![CDATA[<p>today i made simplest driver hello word .<br />
understood lsmod,rmmod,insmod<br />
now i am going home</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/06/30-01-30-jatinder-kumar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>E 30: Vikram Sharma</title>
		<link>https://www.emblogic.com/blog/06/e-30-vikram-sharma-2/</link>
		<comments>https://www.emblogic.com/blog/06/e-30-vikram-sharma-2/#comments</comments>
		<pubDate>Wed, 26 Jun 2013 05:19:49 +0000</pubDate>
		<dc:creator><![CDATA[Vikram Sharma]]></dc:creator>
				<category><![CDATA[Project 04: FTP based Client Server using Threads and Sockets]]></category>
		<category><![CDATA[to pravjot sir]]></category>

		<guid isPermaLink="false">http://www.emblogic.com/blog/?p=6609</guid>
		<description><![CDATA[&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- revision 1.5 date: 2013/06/26 14:31:12;  author: vikram;  state: Exp;  lines: +27 -12 300 Clients Served Successfully. with NO changes. fro version 1.4. &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-]]></description>
				<content:encoded><![CDATA[<div>
<div>
<div>
<div>
<form action="post.php" method="post" name="post">
<div>
<div>
<div>
<div>
<div>
<div></div>
<div>
<table id="content_tbl" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<table id="content_toolbar1" cellspacing="0" cellpadding="0" align="">
<tbody>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>
<table id="content_spellchecker" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td></td>
</tr>
</tbody>
</table>
</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td></td>
</tr>
</tbody>
</table>
</div>
</div>
<table id="post-status-info" cellspacing="0">
<tbody>
<tr>
<td></td>
<td></td>
</tr>
</tbody>
</table>
</div>
<div>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.5<br />
date: 2013/06/26 14:31:12;  author: vikram;  state: Exp;  lines: +27 -12<br />
300 Clients Served Successfully.<br />
with NO changes.<br />
fro version 1.4.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</div>
</div>
</div>
</div>
</form>
</div>
<form action="" method="get"></form>
</div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/06/e-30-vikram-sharma-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>E 30 Avtar Singh</title>
		<link>https://www.emblogic.com/blog/06/e-30-avtar-singh/</link>
		<comments>https://www.emblogic.com/blog/06/e-30-avtar-singh/#comments</comments>
		<pubDate>Tue, 25 Jun 2013 18:55:44 +0000</pubDate>
		<dc:creator><![CDATA[Avtar Singh]]></dc:creator>
				<category><![CDATA[Project 04: FTP based Client Server using Threads and Sockets]]></category>
		<category><![CDATA[to pravjot sir]]></category>

		<guid isPermaLink="false">http://www.emblogic.com/blog/?p=6602</guid>
		<description><![CDATA[RCS file: server.c,v Working file: server.c head: 1.2 branch: locks: strict access list: symbolic names: keyword substitution: kv total revisions: 2;    selected revisions: 2 description: server with one processing client to increment received data by 1. in this threads are &#8230; <a href="https://www.emblogic.com/blog/06/e-30-avtar-singh/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>RCS file: server.c,v<br />
Working file: server.c<br />
head: 1.2<br />
branch:<br />
locks: strict<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 2;    selected revisions: 2<br />
description:<br />
server with one processing client to increment received data by 1.<br />
in this threads are invoking processing client for operation.<br />
two message queues is used b/w server &amp; requesting client ,one to send data &amp; 2nd to receive data from thread.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2<br />
date: 2013/06/25 18:30:00;  author: root;  state: Exp;  lines: +42 -17<br />
Server with two messege queue ,1st to receive data from clients &amp; 2nd to send processed data from server to requesting client.<br />
In this server invoke thread to give response to the requesting client.<br />
Thread call the processing client through fork and execl call.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1<br />
date: 2013/06/25 12:29:16;  author: root;  state: Exp;<br />
Initial revision<br />
=============================================================================</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/06/e-30-avtar-singh/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>E 30: Vikram Sharma</title>
		<link>https://www.emblogic.com/blog/06/e-30-vikram-sharma/</link>
		<comments>https://www.emblogic.com/blog/06/e-30-vikram-sharma/#comments</comments>
		<pubDate>Tue, 25 Jun 2013 18:02:52 +0000</pubDate>
		<dc:creator><![CDATA[Vikram Sharma]]></dc:creator>
				<category><![CDATA[Project 04: FTP based Client Server using Threads and Sockets]]></category>
		<category><![CDATA[to pravjot sir]]></category>

		<guid isPermaLink="false">http://www.emblogic.com/blog/?p=6600</guid>
		<description><![CDATA[RCS file: ./server.c,v Working file: server.c head: 1.4 branch: locks: strict access list: symbolic names: keyword substitution: kv total revisions: 4;    selected revisions: 4 description: Initial server.c But some BUGS. &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- revision 1.4 date: 2013/06/26 03:13:53;  author: vikram;  state: Exp;  &#8230; <a href="https://www.emblogic.com/blog/06/e-30-vikram-sharma/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>RCS file: ./server.c,v<br />
Working file: server.c<br />
head: 1.4<br />
branch:<br />
locks: strict<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 4;    selected revisions: 4<br />
description:<br />
Initial server.c<br />
But some BUGS.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.4<br />
date: 2013/06/26 03:13:53;  author: vikram;  state: Exp;  lines: +45 -19<br />
Used exclusive fifo for each Processing Client.<br />
Still need to work on this.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.3<br />
date: 2013/06/25 22:39:48;  author: vikram;  state: Exp;  lines: +2 -2<br />
Server working Good for exclusive clients.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2<br />
date: 2013/06/25 22:17:58;  author: vikram;  state: Exp;  lines: +2 -0<br />
fetching proper Req from client.<br />
 <img src="https://www.emblogic.com/blog/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /><br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1<br />
date: 2013/06/25 21:42:34;  author: vikram;  state: Exp;<br />
Initial revision<br />
=============================================================================</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/06/e-30-vikram-sharma/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>project_3 using pipe</title>
		<link>https://www.emblogic.com/blog/05/project_3-using-pipe/</link>
		<comments>https://www.emblogic.com/blog/05/project_3-using-pipe/#comments</comments>
		<pubDate>Thu, 30 May 2013 11:16:09 +0000</pubDate>
		<dc:creator><![CDATA[Jatinder Kumar]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[to pravjot sir]]></category>

		<guid isPermaLink="false">http://www.emblogic.com/blog/?p=6506</guid>
		<description><![CDATA[RCS file: project.c,v Working file: project.c head: 1.8 branch: locks: strict access list: symbolic names: keyword substitution: kv total revisions: 8; selected revisions: 8 description: Created simple child and parent using fork. &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- revision 1.8 date: 2013/05/30 11:03:51; author: jatinder; &#8230; <a href="https://www.emblogic.com/blog/05/project_3-using-pipe/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>RCS file: project.c,v<br />
Working file: project.c<br />
head: 1.8<br />
branch:<br />
locks: strict<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 8;     selected revisions: 8<br />
description:<br />
Created simple child and parent using fork.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.8<br />
date: 2013/05/30 11:03:51;  author: jatinder;  state: Exp;  lines: +18 -8<br />
At last server send data to corressponding client in synchronised manner.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.7<br />
date: 2013/05/30 10:15:41;  author: jatinder;  state: Exp;  lines: +37 -17<br />
Uptill now send data from cleint to server .<br />
by using switch call processing client.<br />
successfully send data from server to processing client.<br />
processing client process read data process it and send to back to the server.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.6<br />
date: 2013/05/29 17:20:22;  author: jatinder;  state: Exp;  lines: +20 -5<br />
Called second fork and econd pipe.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.5<br />
date: 2013/05/29 13:08:02;  author: jatinder;  state: Exp;  lines: +9 -8<br />
Simply tested for data read from client1.<br />
Succsfully tested.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.4<br />
                                                                                                                                  1,0-1         Top</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/05/project_3-using-pipe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>E7</title>
		<link>https://www.emblogic.com/blog/07/e7/</link>
		<comments>https://www.emblogic.com/blog/07/e7/#comments</comments>
		<pubDate>Thu, 26 Jul 2012 10:40:36 +0000</pubDate>
		<dc:creator><![CDATA[akash.gupta]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[to pravjot sir]]></category>

		<guid isPermaLink="false">http://emblogic.org/blog/?p=4098</guid>
		<description><![CDATA[created master array.working on further project.]]></description>
				<content:encoded><![CDATA[<p>created master array.working on further project.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/07/e7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
