<?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; gaurav</title>
	<atom:link href="https://www.emblogic.com/blog/author/gaurav/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>Interrupt handler</title>
		<link>https://www.emblogic.com/blog/05/interrupt-handler/</link>
		<comments>https://www.emblogic.com/blog/05/interrupt-handler/#comments</comments>
		<pubDate>Sat, 07 May 2011 13:27:13 +0000</pubDate>
		<dc:creator><![CDATA[gaurav]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://emblogic.org/blog/?p=678</guid>
		<description><![CDATA[The role of an interrupt handler is to give feedback to its device about interrupt reception and to read or write data according to the meaning of the interrupt being serviced. The first step usually consists of clearing a bit &#8230; <a href="https://www.emblogic.com/blog/05/interrupt-handler/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>The role of an interrupt handler is to give feedback to its device about interrupt<br />
reception and to read or write data according to the meaning of the interrupt being<br />
serviced. The first step usually consists of clearing a bit on the interface board; most<br />
hardware devices won’t generate other interrupts until their “interrupt-pending” bit<br />
has been cleared. Depending on how your hardware works, this step may need to be<br />
performed last instead of first; there is no catch-all rule here. Some devices don’t<br />
require this step, because they don’t have an “interrupt-pending” bit; such devices<br />
are a minority.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/05/interrupt-handler/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blocking I/O</title>
		<link>https://www.emblogic.com/blog/05/blocking-io/</link>
		<comments>https://www.emblogic.com/blog/05/blocking-io/#comments</comments>
		<pubDate>Thu, 05 May 2011 13:39:39 +0000</pubDate>
		<dc:creator><![CDATA[gaurav]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://emblogic.org/blog/?p=675</guid>
		<description><![CDATA[A call to read may come when no data is available, but more is expected in the future. Or a process could attempt to write, but your device is not ready to accept the data, because your output buffer is &#8230; <a href="https://www.emblogic.com/blog/05/blocking-io/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>A call to read may come when no data is available, but more is expected in the future. Or a process could attempt to write, but your device is not ready to accept the data, because your output buffer is full. The calling process usually does not care about such issues; the programmer simply expects to call read or write and have the call return after the necessary work has been done. So, in such cases, your driver should (by default) block the process,<br />
putting it to sleep until the request can proceed.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/05/blocking-io/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Interrupt Disabling</title>
		<link>https://www.emblogic.com/blog/05/interrupt-disabling-2/</link>
		<comments>https://www.emblogic.com/blog/05/interrupt-disabling-2/#comments</comments>
		<pubDate>Sun, 01 May 2011 13:40:29 +0000</pubDate>
		<dc:creator><![CDATA[gaurav]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://emblogic.org/blog/?p=671</guid>
		<description><![CDATA[However, interrupt disabling alone does not always prevent kernel control path interleaving. Indeed, a kernel control path could raise a &#8220;Page fault&#8221; exception, which in turn could suspend the current process (and thus the corresponding kernel control path). Or again, &#8230; <a href="https://www.emblogic.com/blog/05/interrupt-disabling-2/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>However, interrupt disabling alone does not always prevent kernel control path interleaving.<br />
Indeed, a kernel control path could raise a &#8220;Page fault&#8221; exception, which in turn could suspend the current process (and thus the corresponding kernel control path). Or again, a kernelcontrol path could directly invoke the schedule( ) function. This happens during most I/O disk operations because they are potentially blocking, that is, they may force the process to sleep until the I/O operation completes. Therefore, the kernel must never execute a blocking operation when interrupts are disabled, since the system could freeze.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/05/interrupt-disabling-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Interrupt Disabling</title>
		<link>https://www.emblogic.com/blog/04/interrupt-disabling/</link>
		<comments>https://www.emblogic.com/blog/04/interrupt-disabling/#comments</comments>
		<pubDate>Sat, 30 Apr 2011 13:29:33 +0000</pubDate>
		<dc:creator><![CDATA[gaurav]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://emblogic.org/blog/?p=665</guid>
		<description><![CDATA[For any section of code too large to be defined as an atomic operation, more complicated means of providing critical sections are needed. To ensure that no window is left open for a race condition to slip in, even a &#8230; <a href="https://www.emblogic.com/blog/04/interrupt-disabling/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>For any section of code too large to be defined as an atomic operation, more complicated<br />
means of providing critical sections are needed. To ensure that no window is left open for a<br />
race condition to slip in, even a window one instruction long, these critical sections always<br />
have an atomic operation at their base.<br />
Interrupt disabling is one of the key mechanisms used to ensure that a sequence of kernel<br />
statements is operated as a critical section. It allows a kernel control path to continue<br />
executing even when hardware devices issue IRQ signals, thus providing an effective way to<br />
protect data structures that are also accessed by interrupt handlers.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/04/interrupt-disabling/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Atomic Operations</title>
		<link>https://www.emblogic.com/blog/04/atomic-operations/</link>
		<comments>https://www.emblogic.com/blog/04/atomic-operations/#comments</comments>
		<pubDate>Sun, 24 Apr 2011 13:37:35 +0000</pubDate>
		<dc:creator><![CDATA[gaurav]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://emblogic.org/blog/?p=663</guid>
		<description><![CDATA[The easiest way to prevent race conditions is by ensuring that an operation is atomic at the chip level: the operation must be executed in a single instruction. These very small atomic operations can be found at the base of &#8230; <a href="https://www.emblogic.com/blog/04/atomic-operations/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>The easiest way to prevent race conditions is by ensuring that an operation is atomic at the chip level: the operation must be executed in a single instruction. These very small atomic operations can be found at the base of other, more flexible mechanisms to create critical sections. Thus, an atomic operation is something that can be performed by executing a single assembly language instruction in an &#8220;atomic&#8221; way, that is, without being interrupted in the middle.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/04/atomic-operations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title></title>
		<link>https://www.emblogic.com/blog/04/658/</link>
		<comments>https://www.emblogic.com/blog/04/658/#comments</comments>
		<pubDate>Sat, 23 Apr 2011 13:36:59 +0000</pubDate>
		<dc:creator><![CDATA[gaurav]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://emblogic.org/blog/?p=658</guid>
		<description><![CDATA[A race condition can occur when the outcome of some computation depends on how two or more interleaved kernel control paths are nested. A critical region is any section of code that should be completely executed by each kernel control &#8230; <a href="https://www.emblogic.com/blog/04/658/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>A race condition can occur when the outcome of some computation depends on how two or more interleaved kernel control paths are nested. A critical region is any section of code that should be completely executed by each kernel control path that begins it, before another kernel control path can enter it.<br />
Here are four broad types of synchronization techniques:</p>
<ul>
<li>Nonpreemptability of processes in Kernel Mode.</li>
<li>Atomic operations</li>
<li>Interrupt disabling.</li>
<li>Locking.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/04/658/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nonpreemptability of Processes in Kernel Mode</title>
		<link>https://www.emblogic.com/blog/04/nonpreemptability-of-processes-in-kernel-mode/</link>
		<comments>https://www.emblogic.com/blog/04/nonpreemptability-of-processes-in-kernel-mode/#comments</comments>
		<pubDate>Fri, 22 Apr 2011 13:47:29 +0000</pubDate>
		<dc:creator><![CDATA[gaurav]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://emblogic.org/blog/?p=655</guid>
		<description><![CDATA[Linux kernel is not preemptive, that is, a running process cannot be preempted (replaced by a higher-priority process) while it remains in Kernel Mode. In particular, the following assertions always hold in Linux: No process running in Kernel Mode may &#8230; <a href="https://www.emblogic.com/blog/04/nonpreemptability-of-processes-in-kernel-mode/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Linux kernel is not preemptive, that is, a running process cannot<br />
be preempted (replaced by a higher-priority process) while it remains in Kernel Mode. In<br />
particular, the following assertions always hold in Linux:</p>
<ul>
<li>No process running in Kernel Mode may be replaced by another process, except when the former voluntarily relinquishes control of the CPU.</li>
<li>Interrupt or exception handling can interrupt a process running in Kernel Mode<br />
however, when the interrupt handler terminates, the kernel control path of the process is resumed.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/04/nonpreemptability-of-processes-in-kernel-mode/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PCI</title>
		<link>https://www.emblogic.com/blog/04/pci/</link>
		<comments>https://www.emblogic.com/blog/04/pci/#comments</comments>
		<pubDate>Mon, 18 Apr 2011 13:24:54 +0000</pubDate>
		<dc:creator><![CDATA[gaurav]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://emblogic.org/blog/?p=640</guid>
		<description><![CDATA[The CPU and the PCI devices need to access memory that is shared between them. This memory is used by device drivers to control the PCI devices and to pass information between them. Typically the shared memory contains control and &#8230; <a href="https://www.emblogic.com/blog/04/pci/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>The CPU and the PCI devices need to access memory that is shared between them. This memory is used by device drivers to control the PCI devices and to pass information between them. Typically the shared memory contains control and status registers for the device. These registers are used to control the device and to read its status. For example, the PCI SCSI device driver would read its status register to find out if the SCSI device was ready to write a block of information to the SCSI disk. Or it might write to the control register to start the device running after it has been turned on.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/04/pci/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SPI</title>
		<link>https://www.emblogic.com/blog/04/spi/</link>
		<comments>https://www.emblogic.com/blog/04/spi/#comments</comments>
		<pubDate>Sat, 16 Apr 2011 13:32:50 +0000</pubDate>
		<dc:creator><![CDATA[gaurav]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://emblogic.org/blog/?p=637</guid>
		<description><![CDATA[The Serial Peripheral Interface (SPI) bus is a serial master-slave interface similar to I 2C and comes built in on many microcontrollers. It uses four wires (compared to two on I2C): Serial CLocK (SCLK), Chip Select (CS),Master Out Slave In &#8230; <a href="https://www.emblogic.com/blog/04/spi/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>The Serial Peripheral Interface (SPI) bus is a serial master-slave interface similar to I 2C and comes built in on many microcontrollers. It uses four wires (compared to two on I2C): Serial CLocK (SCLK), Chip Select (CS),Master Out Slave In (MOSI), and Master In Slave Out (MISO). MOSI is used for shifting data into the slave device, and MISO is used for shifting data out of the slave device. Because the SPI bus has dedicated wires for transmitting and receiving data, it can operate in full-duplex mode, unlike the I 2C bus. The typical speed of<br />
operation of SPI is in the low-megahertz range, unlike the mid-kilohertz range on I2C, so the former yields higher throughput.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/04/spi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>sysfs</title>
		<link>https://www.emblogic.com/blog/04/sysfs/</link>
		<comments>https://www.emblogic.com/blog/04/sysfs/#comments</comments>
		<pubDate>Fri, 15 Apr 2011 13:54:19 +0000</pubDate>
		<dc:creator><![CDATA[gaurav]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://emblogic.org/blog/?p=633</guid>
		<description><![CDATA[Kobjects are the mechanism behind the sysfs virtual filesystem. For every directory found in sysfs, there is a kobject lurking somewhere within the kernel. Every kobject of interest also exports one or more attributes, which appear in that kobject’s sysfs &#8230; <a href="https://www.emblogic.com/blog/04/sysfs/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Kobjects are the mechanism behind the sysfs virtual filesystem. For every directory<br />
found in sysfs, there is a kobject lurking somewhere within the kernel. Every kobject<br />
of interest also exports one or more attributes, which appear in that kobject’s sysfs<br />
directory as files containing kernel-generated information.Code that works with sysfs should include &lt;linux/sysfs.h&gt;.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/04/sysfs/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>kobject</title>
		<link>https://www.emblogic.com/blog/04/kobject/</link>
		<comments>https://www.emblogic.com/blog/04/kobject/#comments</comments>
		<pubDate>Tue, 12 Apr 2011 13:45:46 +0000</pubDate>
		<dc:creator><![CDATA[gaurav]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://emblogic.org/blog/?p=627</guid>
		<description><![CDATA[Adding a kobject to a kset is usually done when the object is created; it is a two-step process. The kobject’s kset field must be pointed at the kset of interest; then the kobject should be passed to: int kobject_add(struct &#8230; <a href="https://www.emblogic.com/blog/04/kobject/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Adding a kobject to a kset is usually done when the object is created; it is a two-step<br />
process. The kobject’s kset field must be pointed at the kset of interest; then the<br />
kobject should be passed to:<br />
<strong> int kobject_add(struct kobject *kobj);</strong><br />
As always, programmers should be aware that this function can fail (in which case it<br />
returns a negative error code) and respond accordingly. There is a convenience func-<br />
tion provided by the kernel:<br />
<strong> extern int kobject_register(struct kobject *kobj);</strong></p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/04/kobject/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>i2c probe and attach functions.</title>
		<link>https://www.emblogic.com/blog/04/i2c-probe-and-attach-functions/</link>
		<comments>https://www.emblogic.com/blog/04/i2c-probe-and-attach-functions/#comments</comments>
		<pubDate>Mon, 11 Apr 2011 14:00:54 +0000</pubDate>
		<dc:creator><![CDATA[gaurav]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://emblogic.org/blog/?p=623</guid>
		<description><![CDATA[When the i2c core calls the driver&#8217;s probe() method signifying the presence of a host adapter, it, in turn,invokes i2c_probe() with arguments specifying the addresses of the slave devices that the driver is responsible for and an associated attach() routine,which &#8230; <a href="https://www.emblogic.com/blog/04/i2c-probe-and-attach-functions/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>When the i2c core calls the driver&#8217;s probe() method signifying the presence of a host adapter, it, in turn,invokes i2c_probe() with arguments specifying the addresses of the slave devices that the driver is responsible for and an associated attach() routine,which registers a per-device client data structure.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/04/i2c-probe-and-attach-functions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>class object</title>
		<link>https://www.emblogic.com/blog/04/class-object/</link>
		<comments>https://www.emblogic.com/blog/04/class-object/#comments</comments>
		<pubDate>Sun, 10 Apr 2011 12:49:16 +0000</pubDate>
		<dc:creator><![CDATA[gaurav]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://emblogic.org/blog/?p=620</guid>
		<description><![CDATA[Each class object includes a list of class_device descriptors, each of which represents a single logical device belonging to the class. The class_device structure includes a dev field that points to a device descriptor, thus a logical device always refers &#8230; <a href="https://www.emblogic.com/blog/04/class-object/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Each class object includes a list of <tt>class_device</tt> descriptors, each of which represents a single logical device belonging to the class. The <tt>class_device</tt> structure includes a <tt>dev</tt> field that points to a <tt>device</tt> descriptor, thus a logical device always refers to a given device in the device driver model. However, there can be several <tt>class_device</tt> descriptors that refer to the same device. In fact, a hardware device might include several different sub-devices, each of which requires a different User Mode interface.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/04/class-object/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>i2c</title>
		<link>https://www.emblogic.com/blog/04/i2c/</link>
		<comments>https://www.emblogic.com/blog/04/i2c/#comments</comments>
		<pubDate>Sat, 09 Apr 2011 13:56:57 +0000</pubDate>
		<dc:creator><![CDATA[gaurav]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://emblogic.org/blog/?p=609</guid>
		<description><![CDATA[I2C is the name for a two-wire serial bus protocol originally developed by Phillips. It commonly is used in embedded systems so different components can communicate; PC motherboards use I2C to talk to different sensor chips. Those sensors typically report &#8230; <a href="https://www.emblogic.com/blog/04/i2c/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>I2C is the name for a two-wire serial bus protocol originally developed by Phillips. It commonly is used in embedded systems so different components can communicate; PC motherboards use I2C to talk to different sensor chips. Those sensors typically report back fan speeds, processor temperatures and a whole raft of system hardware information.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/04/i2c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dentry Object</title>
		<link>https://www.emblogic.com/blog/03/dentry-object/</link>
		<comments>https://www.emblogic.com/blog/03/dentry-object/#comments</comments>
		<pubDate>Thu, 31 Mar 2011 13:28:11 +0000</pubDate>
		<dc:creator><![CDATA[gaurav]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://emblogic.org/blog/?p=599</guid>
		<description><![CDATA[VFS considers each directory a file that contains a list of files and other directories.Once a directory entry is read into memory, however, it is transformed by the VFS into a dentry object based on the dentry structure.The kernel creates &#8230; <a href="https://www.emblogic.com/blog/03/dentry-object/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>VFS considers each directory a file that contains a list of files and other directories.Once a directory entry is read into memory, however, it is transformed by the VFS into a dentry object based on the <tt>dentry</tt> structure.The kernel creates a dentry object for every component of a pathname that a process looks up; the dentry object associates the component to its corresponding inode. For example, when looking up the <em>/tmp/test</em> pathname, the kernel creates a dentry object for the <em>/</em> root directory, a second dentry object for the <em>tmp</em> entry of the root directory, and a third dentry object for the <em>test</em> entry of the <em>/tmp</em> directory.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/03/dentry-object/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
