<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DUMNRH06fCp7ImA9WhRaFE0.&quot;"><id>tag:blogger.com,1999:blog-8629334689063620082</id><updated>2012-02-16T07:51:35.314-08:00</updated><category term="ramdisk" /><category term="headers_install" /><category term="Linux kernel module" /><category term="BUILD_BUG_ON" /><category term="modules.dep" /><category term="root file system" /><category term="modprobe" /><category term="C" /><category term="sorting a linked list" /><category term="kernel headers" /><category term="ARM" /><category term="make headers_install" /><category term="analysing core dumps" /><category term="global setting git" /><category term="readelf" /><category term="qsort example" /><category term="QEMU with U-boot" /><category term="code profiling linux" /><category term="Embedded" /><category term="installing modules in rootfs" /><category term="mtrace" /><category term="Structure padding" /><category term="git" /><category term="valgrind" /><category term="Linux Kernel modules" /><category term="containerof" /><category term="embedded processors" /><category term="CRAMFS" /><category term="sort linked list ascending order" /><category term="strace" /><category term="embedded linux" /><category term="calgrind" /><category term="ltrace" /><category term="MMU Less systems" /><category term="Debugging" /><category term="QEMU" /><category term="code to determine endianness" /><category term="how to build your own busybox system" /><category term="busybox" /><category term="JFFS" /><category term="UBOOT" /><category term="linux kernel mod utils" /><category term="ARM linux on Versatile" /><category term="strings" /><category term="generating kernel headers" /><category term="Linux Device Drivers" /><category term="ARM QEMU UBOOT" /><category term="c library" /><category term="endianess" /><category term="JFFS2" /><category term="binutils" /><category term="busybox root file system" /><category term="Embedded Interview questions" /><category term="depmod" /><category term="Bitfields C" /><category term="rootfs" /><category term="sort linked list descending order" /><category term="Embedded systems" /><category term="PIC" /><category term="core-dump. enable core dump" /><category term="qsort" /><category term="Linux kernel headers" /><category term="ARM Linux" /><category term="Position Independent Code" /><category term="arm linux on QEMU" /><category term="NFS" /><category term="email username settings git" /><category term="initrd" /><category term="cross toolchains" /><category term="cathing bugs at compile time" /><category term="nm" /><category term="gdb core dump" /><category term="objdump" /><category term="little endian" /><category term="kcachegrind" /><category term="big endian" /><category term="headers_install_all" /><category term="DHCP" /><category term="addr2line" /><title>Embedded-Intelligence</title><subtitle type="html">Never be afraid to try something new. Remember, amateurs built the ark. Professionals built the Titanic</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://embedded-intelligence.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://embedded-intelligence.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Nemesis Of The State</name><uri>http://www.blogger.com/profile/08729047479455186451</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="25" src="http://3.bp.blogspot.com/_V6Fx-tfyJms/SNYKC1bHWpI/AAAAAAAAABo/_7qA_h9BszU/S220/ss_kali.bmp" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>35</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/Embedded-intelligence" /><feedburner:info uri="embedded-intelligence" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CkMCRXs5fSp7ImA9WxFSFkQ.&quot;"><id>tag:blogger.com,1999:blog-8629334689063620082.post-844953122319004004</id><published>2010-04-19T08:21:00.000-07:00</published><updated>2010-04-19T08:21:04.525-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-19T08:21:04.525-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="containerof" /><title>Learning from Linux Kernel</title><content type="html">1.&lt;b&gt; container_of&lt;/b&gt;: Being passed a pointer, it returns the pointer to the structure that contains this.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;#define container_of(ptr, type, member) ({                      \
        const typeof( ((type *)0)-&amp;gt;member ) *__mptr = (ptr);    \
        (type *)( (char *)__mptr - offsetof(type,member) );})&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;&lt;pre&gt;where&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: sans-serif; font-size: 13px; line-height: 19px; white-space: normal;"&gt;&lt;pre style="background-color: #f9f9f9; border-bottom-color: rgb(47, 111, 171); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(47, 111, 171); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(47, 111, 171); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(47, 111, 171); border-top-style: dashed; border-top-width: 1px; color: black; font-family: monospace, sans-serif !important; line-height: 1.1em; padding-bottom: 1em; padding-left: 1em; padding-right: 1em; padding-top: 1em;"&gt;#define &lt;b&gt;offsetof&lt;/b&gt;(type, member) \
    ((size_t) ( (char *)&amp;amp;((type *)(0))-&amp;gt;member - (char *)0 ))&lt;/pre&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8629334689063620082-844953122319004004?l=embedded-intelligence.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/hqPVTTezvH28bqbL7LxcjJ2FpHg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hqPVTTezvH28bqbL7LxcjJ2FpHg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/hqPVTTezvH28bqbL7LxcjJ2FpHg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hqPVTTezvH28bqbL7LxcjJ2FpHg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Embedded-intelligence/~4/QAPR7lIYKxc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://embedded-intelligence.blogspot.com/feeds/844953122319004004/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8629334689063620082&amp;postID=844953122319004004" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/844953122319004004?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/844953122319004004?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Embedded-intelligence/~3/QAPR7lIYKxc/learning-from-linux-kernel.html" title="Learning from Linux Kernel" /><author><name>Nemesis Of The State</name><uri>http://www.blogger.com/profile/08729047479455186451</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="25" src="http://3.bp.blogspot.com/_V6Fx-tfyJms/SNYKC1bHWpI/AAAAAAAAABo/_7qA_h9BszU/S220/ss_kali.bmp" /></author><thr:total>0</thr:total><feedburner:origLink>http://embedded-intelligence.blogspot.com/2010/04/learning-from-linux-kernel.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkIHRXo4fip7ImA9WxFTFEQ.&quot;"><id>tag:blogger.com,1999:blog-8629334689063620082.post-2819802169303012683</id><published>2010-04-05T13:15:00.000-07:00</published><updated>2010-04-05T13:15:34.436-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-05T13:15:34.436-07:00</app:edited><title>My Favourite Quotes</title><content type="html">Pascal : "&lt;i&gt;If I had more time, I would written you a shorter letter "&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
Einstein&lt;i&gt; : "God doesn't play dice with the Universe"&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
Neils Bohr&lt;i&gt; : "&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px;"&gt;Prediction is very difficult, especially if it's about the future"&lt;/span&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8629334689063620082-2819802169303012683?l=embedded-intelligence.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/QF8pCnn6xXeDekco2YNmOc6Dn0k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QF8pCnn6xXeDekco2YNmOc6Dn0k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/QF8pCnn6xXeDekco2YNmOc6Dn0k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QF8pCnn6xXeDekco2YNmOc6Dn0k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Embedded-intelligence/~4/QJL_kjcwGAs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://embedded-intelligence.blogspot.com/feeds/2819802169303012683/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8629334689063620082&amp;postID=2819802169303012683" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/2819802169303012683?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/2819802169303012683?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Embedded-intelligence/~3/QJL_kjcwGAs/my-favourite-quotes.html" title="My Favourite Quotes" /><author><name>Nemesis Of The State</name><uri>http://www.blogger.com/profile/08729047479455186451</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="25" src="http://3.bp.blogspot.com/_V6Fx-tfyJms/SNYKC1bHWpI/AAAAAAAAABo/_7qA_h9BszU/S220/ss_kali.bmp" /></author><thr:total>0</thr:total><feedburner:origLink>http://embedded-intelligence.blogspot.com/2010/04/my-favourite-quotes.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcERnYzeyp7ImA9WxBbE0w.&quot;"><id>tag:blogger.com,1999:blog-8629334689063620082.post-9194529570347515959</id><published>2010-03-11T06:16:00.000-08:00</published><updated>2010-03-11T06:16:47.883-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-11T06:16:47.883-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="valgrind" /><category scheme="http://www.blogger.com/atom/ns#" term="kcachegrind" /><category scheme="http://www.blogger.com/atom/ns#" term="code profiling linux" /><category scheme="http://www.blogger.com/atom/ns#" term="calgrind" /><title>Profiling Tools : Valgrind &amp; co</title><content type="html">VALGRIND&lt;br /&gt;
============ &lt;br /&gt;
We will use valgrind with following tools :-&lt;br /&gt;
&lt;br /&gt;
&amp;gt; memcheck&amp;nbsp; [default]&lt;br /&gt;
&amp;gt; callgrind&lt;br /&gt;
&amp;gt; cachegrind&lt;br /&gt;
&amp;gt; massif&lt;br /&gt;
&amp;gt; helgrind&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;valgrind --tool=memcheck [prog-name] [prog-argumements]&lt;/b&gt;&lt;br /&gt;
a simple example is valgrind --tool=memcheck ls -al&lt;br /&gt;
===================================================&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;nemesis@nemesis-laptop:~$ valgrind --tool=memcheck ls -al&lt;br /&gt;
==3497== Memcheck, a memory error detector&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
==3497== Copyright (C) 2002-2009, and GNU GPL'd, by Julian Seward et al.&lt;br /&gt;
==3497== Using Valgrind-3.5.0-Debian and LibVEX; rerun with -h for copyright info&lt;br /&gt;
==3497== Command: ls -al&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
==3497==&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
total 13300 &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;==3497==&lt;br /&gt;
==3497== HEAP SUMMARY:&lt;br /&gt;
==3497==&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; in use at exit: 14,671 bytes in 95 blocks&lt;br /&gt;
==3497==&amp;nbsp;&amp;nbsp; total heap usage: 1,902 allocs, 1,807 frees, 150,632 bytes allocated&lt;br /&gt;
==3497==&lt;br /&gt;
==3497== LEAK SUMMARY:&lt;br /&gt;
==3497==&amp;nbsp;&amp;nbsp;&amp;nbsp; definitely lost: 200 bytes in 3 blocks&lt;br /&gt;
==3497==&amp;nbsp;&amp;nbsp;&amp;nbsp; indirectly lost: 240 bytes in 20 blocks&lt;br /&gt;
==3497==&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; possibly lost: 0 bytes in 0 blocks&lt;br /&gt;
==3497==&amp;nbsp;&amp;nbsp;&amp;nbsp; still reachable: 14,231 bytes in 72 blocks&lt;br /&gt;
==3497==&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; suppressed: 0 bytes in 0 blocks&lt;br /&gt;
==3497== Rerun with --leak-check=full to see details of leaked memory&lt;br /&gt;
==3497==&lt;br /&gt;
==3497== For counts of detected and suppressed errors, rerun with: -v&lt;br /&gt;
==3497== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 33 from 10)&lt;/span&gt;&lt;br /&gt;
===================================================&lt;br /&gt;
[NOTE]: In the above trace "3497" which precedes every line of Valgrind output is the pid of the program being run under valgrind i.e. ls -al in this case.&lt;br /&gt;
&lt;br /&gt;
PRE-REQUISITES&lt;br /&gt;
==============&lt;br /&gt;
&lt;br /&gt;
1. Strongly recommended to run the program with &lt;b&gt;-g (with debug symbols)&lt;/b&gt; option. It is &lt;b&gt;generally&lt;/b&gt; true of all profiling tools.&lt;br /&gt;
&lt;br /&gt;
2. Use &lt;b&gt;no optimization &lt;/b&gt;or as a compromise&lt;b&gt; -0 &lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8629334689063620082-9194529570347515959?l=embedded-intelligence.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rbwxLfmHo-8Eci_ZF3SNhdOULQA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rbwxLfmHo-8Eci_ZF3SNhdOULQA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rbwxLfmHo-8Eci_ZF3SNhdOULQA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rbwxLfmHo-8Eci_ZF3SNhdOULQA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Embedded-intelligence/~4/3GsYpkFQvYw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://embedded-intelligence.blogspot.com/feeds/9194529570347515959/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8629334689063620082&amp;postID=9194529570347515959" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/9194529570347515959?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/9194529570347515959?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Embedded-intelligence/~3/3GsYpkFQvYw/profiling-tools-valgrind-co.html" title="Profiling Tools : Valgrind &amp; co" /><author><name>Nemesis Of The State</name><uri>http://www.blogger.com/profile/08729047479455186451</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="25" src="http://3.bp.blogspot.com/_V6Fx-tfyJms/SNYKC1bHWpI/AAAAAAAAABo/_7qA_h9BszU/S220/ss_kali.bmp" /></author><thr:total>0</thr:total><feedburner:origLink>http://embedded-intelligence.blogspot.com/2010/03/profiling-tools-valgrind-co.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4MQXY9cSp7ImA9WxBbE0w.&quot;"><id>tag:blogger.com,1999:blog-8629334689063620082.post-7315384629262214151</id><published>2010-03-10T11:25:00.000-08:00</published><updated>2010-03-11T06:16:20.869-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-11T06:16:20.869-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Structure padding" /><category scheme="http://www.blogger.com/atom/ns#" term="Bitfields C" /><title>Bitfields</title><content type="html">-- Used for saving space&lt;br /&gt;
-- NOT portable across platforms&lt;br /&gt;
-- bitfield declaration cannot use &lt;b&gt;const&lt;/b&gt; and &lt;b&gt;volatile&lt;/b&gt; qualifiers&lt;br /&gt;
-- Max bit field length is 64 bits. Using more than 32 bits is likely to be non portable&lt;br /&gt;
&lt;br /&gt;
-- CANNOT take the address of a bitfield&lt;br /&gt;
-- CANNOT have a pointer to a bitfield&lt;br /&gt;
-- CANNOT define an array of bitfields&lt;br /&gt;
&lt;br /&gt;
-- A bitfield of size 0 will force alignment to the nearest word boundary [depends actually on compiler behaviour -- some compilers may pad to the size of the base type...some to the word boundary]&lt;br /&gt;
&lt;br /&gt;
-- A structure containing bitfields is suitably/appropriately padded.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8629334689063620082-7315384629262214151?l=embedded-intelligence.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KcsGdMVzn-7Fv_MVzofU4ZF43rA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KcsGdMVzn-7Fv_MVzofU4ZF43rA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KcsGdMVzn-7Fv_MVzofU4ZF43rA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KcsGdMVzn-7Fv_MVzofU4ZF43rA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Embedded-intelligence/~4/To2MoVN71tI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://embedded-intelligence.blogspot.com/feeds/7315384629262214151/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8629334689063620082&amp;postID=7315384629262214151" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/7315384629262214151?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/7315384629262214151?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Embedded-intelligence/~3/To2MoVN71tI/bitfields.html" title="Bitfields" /><author><name>Nemesis Of The State</name><uri>http://www.blogger.com/profile/08729047479455186451</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="25" src="http://3.bp.blogspot.com/_V6Fx-tfyJms/SNYKC1bHWpI/AAAAAAAAABo/_7qA_h9BszU/S220/ss_kali.bmp" /></author><thr:total>0</thr:total><feedburner:origLink>http://embedded-intelligence.blogspot.com/2010/03/bitfields.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcNQn0yfyp7ImA9WxBbEUs.&quot;"><id>tag:blogger.com,1999:blog-8629334689063620082.post-8902262401070536875</id><published>2010-03-09T12:11:00.000-08:00</published><updated>2010-03-09T12:38:13.397-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-09T12:38:13.397-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="BUILD_BUG_ON" /><category scheme="http://www.blogger.com/atom/ns#" term="cathing bugs at compile time" /><title>Cool Compile time check</title><content type="html">If only we could evaluate a condition at compile time instead of link or run time. Well there is a way ...&lt;br /&gt;
Picked up this nifty trick from the linux kernel code.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;#define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2 *!!(condition)]))&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Awesome piece of code ....It's a beauty...&lt;br /&gt;
&lt;br /&gt;
Concept : Array of negative size is illegal. Remember array of size 0 is possible&lt;br /&gt;
Therefore if a condition evaluates to true we have :-&lt;br /&gt;
void(sizeof(NEGATIVE ARRAY) which would trigger a compile time error&lt;br /&gt;
&lt;br /&gt;
If the condition is false, we have :-&lt;br /&gt;
&lt;br /&gt;
void (sizeof(char[1 - 2 * !!(0))])&lt;br /&gt;
==&amp;gt; void(sizeof(char[1-2* !1])&lt;br /&gt;
====&amp;gt;void(sizeof(char[1-0])&lt;br /&gt;
======&amp;gt;void(sizeof(char[1])&lt;br /&gt;
========&amp;gt; void(const number) ====&amp;gt; This has no impact on C code although it is a valid expression.&lt;br /&gt;
you could have 1; anywhere in the code but to be "gcc warning free" it is better to have (void) 1 .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is a simple example, don't worry about the logic as I just needed a condition and do NOT mean to say that size of int should be smaller than that of a char :)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;#define ADY_BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2 * !!(condition)]))&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv [])&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp; /* will not compile */&lt;br /&gt;
&amp;nbsp;&amp;nbsp; ADY_BUILD_BUG_ON(sizeof(char) &amp;lt; &amp;nbsp;sizeof(int));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
and here is what we get :--&lt;br /&gt;
&lt;br /&gt;
nemesis@nemesis-laptop:~/test_code$ gcc build_bug_on_example.c&lt;br /&gt;
build_bug_on_example.c: In function ‘main’:&lt;br /&gt;
build_bug_on_example.c:9: error: size of array ‘type name’ is negative&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8629334689063620082-8902262401070536875?l=embedded-intelligence.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/PK4IetrYS7gdHS2eFpK3omEhOkg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PK4IetrYS7gdHS2eFpK3omEhOkg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/PK4IetrYS7gdHS2eFpK3omEhOkg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PK4IetrYS7gdHS2eFpK3omEhOkg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Embedded-intelligence/~4/pzWtr-tQ7T8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://embedded-intelligence.blogspot.com/feeds/8902262401070536875/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8629334689063620082&amp;postID=8902262401070536875" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/8902262401070536875?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/8902262401070536875?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Embedded-intelligence/~3/pzWtr-tQ7T8/cool-compile-time-check.html" title="Cool Compile time check" /><author><name>Nemesis Of The State</name><uri>http://www.blogger.com/profile/08729047479455186451</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="25" src="http://3.bp.blogspot.com/_V6Fx-tfyJms/SNYKC1bHWpI/AAAAAAAAABo/_7qA_h9BszU/S220/ss_kali.bmp" /></author><thr:total>0</thr:total><feedburner:origLink>http://embedded-intelligence.blogspot.com/2010/03/cool-compile-time-check.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4BQ3wzeyp7ImA9WxBbEUs.&quot;"><id>tag:blogger.com,1999:blog-8629334689063620082.post-4222848623429002578</id><published>2010-03-09T11:29:00.000-08:00</published><updated>2010-03-09T11:29:12.283-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-09T11:29:12.283-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux Kernel modules" /><category scheme="http://www.blogger.com/atom/ns#" term="depmod" /><category scheme="http://www.blogger.com/atom/ns#" term="modprobe" /><category scheme="http://www.blogger.com/atom/ns#" term="modules.dep" /><category scheme="http://www.blogger.com/atom/ns#" term="linux kernel mod utils" /><title>Mod Utils</title><content type="html">Package name : &lt;b&gt;module-init-tools&lt;/b&gt;&lt;br /&gt;
sudo apt-get install module-init-tools&lt;br /&gt;
&lt;br /&gt;
Use :-&lt;br /&gt;
&lt;b&gt;lsmod&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;modprobe&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;depmod&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;rmmod&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Modprobe&lt;/b&gt; : Intelligent enough to figure out the dependencies.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [it is just a depmod -a combined with insmod of the necessary modules]&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Default location of the modules&lt;/b&gt; :&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;b&gt; /lib/modules/`uname -r`&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Module dependency&lt;br /&gt;
&amp;nbsp;File : /lib/modules/`uname -r`/modules.dep&lt;br /&gt;
&lt;br /&gt;
e.g from the modules.dep file :-&lt;br /&gt;
&amp;nbsp;-------------x--------------------------x---------------------------x--------------------------------&lt;br /&gt;
&lt;br /&gt;
kernel/fs/freevxfs/freevxfs.ko:&lt;br /&gt;
kernel/fs/nfs/nfs.ko: kernel/fs/lockd/lockd.ko kernel/fs/nfs_common/nfs_acl.ko kernel/net/sunrpc/auth_gss/auth_rpcgss.ko kernel/net/sunrpc/sunrpc.ko&lt;br /&gt;
kernel/fs/exportfs/exportfs.ko:&lt;br /&gt;
kernel/fs/nfsd/nfsd.ko: kernel/fs/lockd/lockd.ko kernel/fs/nfs_common/nfs_acl.ko kernel/net/sunrpc/auth_gss/auth_rpcgss.ko kernel/net/sunrpc/sunrpc.ko kernel/fs/exportfs/exp&lt;br /&gt;
ortfs.ko&lt;br /&gt;
kernel/fs/lockd/lockd.ko: kernel/net/sunrpc/sunrpc.ko&lt;br /&gt;
&lt;div&gt;-------------x--------------------------x---------------------------x--------------------------------&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Therefore, nfs.ko requires nfs_acl.ko to be already installed. This dependency is build by &lt;b&gt;depmod -a&lt;/b&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8629334689063620082-4222848623429002578?l=embedded-intelligence.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Pr-lDbKWEW03Zf6ddfc5flzIU7I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Pr-lDbKWEW03Zf6ddfc5flzIU7I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Pr-lDbKWEW03Zf6ddfc5flzIU7I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Pr-lDbKWEW03Zf6ddfc5flzIU7I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Embedded-intelligence/~4/PtfNj2AX0X0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://embedded-intelligence.blogspot.com/feeds/4222848623429002578/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8629334689063620082&amp;postID=4222848623429002578" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/4222848623429002578?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/4222848623429002578?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Embedded-intelligence/~3/PtfNj2AX0X0/mod-utils.html" title="Mod Utils" /><author><name>Nemesis Of The State</name><uri>http://www.blogger.com/profile/08729047479455186451</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="25" src="http://3.bp.blogspot.com/_V6Fx-tfyJms/SNYKC1bHWpI/AAAAAAAAABo/_7qA_h9BszU/S220/ss_kali.bmp" /></author><thr:total>0</thr:total><feedburner:origLink>http://embedded-intelligence.blogspot.com/2010/03/mod-utils.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8NR30-fCp7ImA9WxBbEEo.&quot;"><id>tag:blogger.com,1999:blog-8629334689063620082.post-3897899284759598317</id><published>2010-03-08T10:44:00.000-08:00</published><updated>2010-03-08T10:44:56.354-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-08T10:44:56.354-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="qsort" /><title>qsort: Using array</title><content type="html">1. The realloc operation can be expensive if the the operation is carried out for a large number of times AND/OR if the memory is already fragmented.&lt;br /&gt;
&lt;br /&gt;
2. A malloc operation could be considered but it would require a flag to indicate the first instance of executing the function&lt;br /&gt;
&lt;br /&gt;
if ( FLAG == TRUE)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; Memory already allocated. Don't allocate any memory&lt;br /&gt;
else &amp;nbsp;{ /* Flag = FALSE */&lt;br /&gt;
&amp;nbsp;&amp;nbsp; Allocate Memory&lt;br /&gt;
&amp;nbsp;&amp;nbsp; Set Flag = TRUE&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------------------------------x------------------x-------------------x-----------------------------&lt;br /&gt;
#define ARRAY_SIZE 10&lt;br /&gt;
&lt;br /&gt;
typedef struct adi_data_t_ {&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;unsigned int number;&lt;br /&gt;
} adi_data_t;&lt;br /&gt;
&lt;br /&gt;
typedef struct adi_delete_list_t_ {&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;adi_data_t ** first;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;unsigned int count;&lt;br /&gt;
} adi_delete_list_t;&lt;br /&gt;
&lt;br /&gt;
int adi_compare_data (const void * a, const void *b)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp; const adi_data_t ** one = (const adi_data_t **) a;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; const adi_data_t ** two = (const adi_data_t **) b;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; printf("Number one : [%d] Number two : [%d] &amp;nbsp;ret [%d]\n", (*one)-&amp;gt;number, (*two)-&amp;gt;number, (*one)-&amp;gt;number - (*two)-&amp;gt;number);&lt;br /&gt;
&amp;nbsp;&amp;nbsp; //return (*one)-&amp;gt;number - (*two)-&amp;gt;number ;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;return (*two)-&amp;gt;number - (*one)-&amp;gt;number ;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int adi_delete_walker(adi_delete_list_t * delete, adi_data_t * data)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;static adi_data_t* array[ARRAY_SIZE];&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;void *temp = NULL;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;delete-&amp;gt;first = array;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;memcpy(&amp;amp;array[delete-&amp;gt;count], &amp;amp;data, sizeof(adi_data_t *));&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;delete-&amp;gt;count++;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main (int argc, char* argv[])&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;adi_delete_list_t delete;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;adi_data_t data_array[ARRAY_SIZE];&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;unsigned int i = 0;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;memset(&amp;amp;delete, 0, sizeof(adi_delete_list_t));&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Fill the array and pass it to the delete function */&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;for (i=0; i &amp;lt; ARRAY_SIZE ; i++) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;data_array[i].number = rand()/1000000;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;printf(" Data Array filled with %d \n", data_array[i].number);&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;adi_delete_walker(&amp;amp;delete, &amp;amp;data_array[i]);&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;printf("qsort parameters: first [%p] count [%d]", delete.first, delete.count);&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;/* qsort the array */&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;qsort(delete.first, delete.count, sizeof(adi_data_t *), adi_compare_data);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; for (i=0; i &amp;lt; ARRAY_SIZE ; i++) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;printf(" POST SORT: Data Array filled with %d \n", (*(delete.first)[i]).number);&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8629334689063620082-3897899284759598317?l=embedded-intelligence.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YRpB3dNoIsUAI8KEHqCAmvx18Ps/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YRpB3dNoIsUAI8KEHqCAmvx18Ps/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YRpB3dNoIsUAI8KEHqCAmvx18Ps/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YRpB3dNoIsUAI8KEHqCAmvx18Ps/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Embedded-intelligence/~4/ijgZhdm14QU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://embedded-intelligence.blogspot.com/feeds/3897899284759598317/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8629334689063620082&amp;postID=3897899284759598317" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/3897899284759598317?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/3897899284759598317?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Embedded-intelligence/~3/ijgZhdm14QU/qsort-using-array.html" title="qsort: Using array" /><author><name>Nemesis Of The State</name><uri>http://www.blogger.com/profile/08729047479455186451</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="25" src="http://3.bp.blogspot.com/_V6Fx-tfyJms/SNYKC1bHWpI/AAAAAAAAABo/_7qA_h9BszU/S220/ss_kali.bmp" /></author><thr:total>0</thr:total><feedburner:origLink>http://embedded-intelligence.blogspot.com/2010/03/qsort-using-array.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04HR3YzfCp7ImA9WxBUGEU.&quot;"><id>tag:blogger.com,1999:blog-8629334689063620082.post-5139133959056833343</id><published>2010-03-03T10:30:00.001-08:00</published><updated>2010-03-06T06:32:16.884-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-06T06:32:16.884-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sort linked list descending order" /><category scheme="http://www.blogger.com/atom/ns#" term="sorting a linked list" /><category scheme="http://www.blogger.com/atom/ns#" term="sort linked list ascending order" /><category scheme="http://www.blogger.com/atom/ns#" term="qsort example" /><category scheme="http://www.blogger.com/atom/ns#" term="qsort" /><title>qsort Example</title><content type="html">1. This example will demonstrate how to sort a given list in ascending or descending order&lt;br /&gt;
&lt;br /&gt;
2. Many a times the structures are quite big and allocating such structures could be resource intensive&amp;nbsp;exercise. Therefore I allocate a list of pointers to pointers (double pointer) to the original data structure.&lt;br /&gt;
&lt;br /&gt;
3. QSORT sorts only arrays or data stored in contiguous memory locations. Therefore can't be directly used to sort linked lists.&lt;br /&gt;
&lt;br /&gt;
Workaround : Walk the Linked List&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Store the pointers to these nodes in an array/allocated memory location&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Call Qsort to sort this array based on a comparison function that you define.&lt;br /&gt;
&lt;br /&gt;
###include files : stdio.h -- stdlib.h -- string .h ####&lt;br /&gt;
&lt;br /&gt;
-- &amp;nbsp;This function will read the contents of a linked-list/array and copy into an "array" of pointers to the data. Qsort will sort this array.&lt;br /&gt;
&lt;br /&gt;
#define ARRAY_SIZE 10&lt;br /&gt;
&lt;br /&gt;
typedef struct adi_data_t_ {&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;unsigned int number;&lt;br /&gt;
} adi_data_t;&lt;br /&gt;
&lt;br /&gt;
typedef struct adi_delete_list_t_ {&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;adi_data_t ** first;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;unsigned int count;&lt;br /&gt;
} adi_delete_list_t;&lt;br /&gt;
&lt;br /&gt;
/* compare function to sort in ASCENDING order */&lt;br /&gt;
int adi_compare_data (const void * a, const void *b)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp; const adi_data_t ** one = (const adi_data_t **) a;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; const adi_data_t ** two = (const adi_data_t **) b;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; printf("Number one : [%d] Number two : [%d] &amp;nbsp;ret [%d]\n", (*one)-&amp;gt;number, (*two)-&amp;gt;number, (*one)-&amp;gt;number - (*two)-&amp;gt;number);&lt;br /&gt;
&amp;nbsp;&amp;nbsp; return (*one)-&amp;gt;number - (*two)-&amp;gt;number ;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* compare function to sort in DESCENDING order */&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;int adi_compare_data (const void * a, const void *b)&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;{&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; const adi_data_t ** one = (const adi_data_t **) a;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; const adi_data_t ** two = (const adi_data_t **) b;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; printf("Number one : [%d] Number two : [%d] &amp;nbsp;ret [%d]\n", (*one)-&amp;gt;number, (*two)-&amp;gt;number, (*one)-&amp;gt;number - (*two)-&amp;gt;number);&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; return (*two)-&amp;gt;number - (*one)-&amp;gt;number ;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;}&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int adi_delete_walker(adi_delete_list_t * delete, adi_data_t * data)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;static adi_data_t ** list = NULL;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;void *temp = NULL;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;/* allocate memory for the list */&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;temp = realloc(list, (delete-&amp;gt;count + 1) * sizeof (adi_data_t *));&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;if(temp == NULL) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;printf("###!Ady: Hell Freezes over: Realloc failed \n");&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;} else {&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;list = (adi_data_t **) temp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;delete-&amp;gt;first = list;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;memcpy(&amp;amp;list[delete-&amp;gt;count], &amp;amp;data, sizeof(adi_data_t *));&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;printf(" First [%p] List [%p] Current element:[%p] \n", delete-&amp;gt;first, list, &amp;amp;list[delete-&amp;gt;count]);&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;delete-&amp;gt;count++;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;
}&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;int main (int argc, char* argv[])&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;adi_delete_list_t delete;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;adi_data_t data_array[10];&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;unsigned int i = 0;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;memset(&amp;amp;delete, 0, sizeof(adi_delete_list_t));&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Fill the array and pass it to the delete function */&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;for (i=0; i &amp;lt; 10 ; i++) {&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;data_array[i].number = rand()/1000000;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;printf(" Data Array filled with %d \n", data_array[i].number);&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;adi_delete_walker(&amp;amp;delete, &amp;amp;data_array[i]);&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;printf("qsort parameters: first [%p] count [%d]", delete.first, delete.count);&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* qsort the array */&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;qsort(delete.first, delete.count, sizeof(adi_data_t *), adi_compare_data);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; for (i=0; i &amp;lt; 10 ; i++) {&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;printf(" POST SORT: Data Array filled with %d \n", (*(delete.first)[i]).number);&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;free(delete.first);&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8629334689063620082-5139133959056833343?l=embedded-intelligence.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Z9JiCeVp-yJ3bEMousoV5aUKNqs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Z9JiCeVp-yJ3bEMousoV5aUKNqs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Z9JiCeVp-yJ3bEMousoV5aUKNqs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Z9JiCeVp-yJ3bEMousoV5aUKNqs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Embedded-intelligence/~4/LWKJZ7BPeiI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://embedded-intelligence.blogspot.com/feeds/5139133959056833343/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8629334689063620082&amp;postID=5139133959056833343" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/5139133959056833343?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/5139133959056833343?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Embedded-intelligence/~3/LWKJZ7BPeiI/qsort-example.html" title="qsort Example" /><author><name>Nemesis Of The State</name><uri>http://www.blogger.com/profile/08729047479455186451</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="25" src="http://3.bp.blogspot.com/_V6Fx-tfyJms/SNYKC1bHWpI/AAAAAAAAABo/_7qA_h9BszU/S220/ss_kali.bmp" /></author><thr:total>0</thr:total><feedburner:origLink>http://embedded-intelligence.blogspot.com/2010/03/qsort-example.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEHQXw9fSp7ImA9WxBSEUg.&quot;"><id>tag:blogger.com,1999:blog-8629334689063620082.post-743864143905313082</id><published>2009-12-18T09:33:00.000-08:00</published><updated>2009-12-18T09:33:50.265-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-18T09:33:50.265-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mtrace" /><category scheme="http://www.blogger.com/atom/ns#" term="strace" /><category scheme="http://www.blogger.com/atom/ns#" term="Debugging" /><category scheme="http://www.blogger.com/atom/ns#" term="ltrace" /><title>Miscellaneous Debugging tips</title><content type="html">LTRACE&lt;br /&gt;
=========================================&lt;br /&gt;
from the Man page&lt;br /&gt;
ltrace&amp;nbsp; is&amp;nbsp; a&amp;nbsp; program&amp;nbsp; that&amp;nbsp; simply&amp;nbsp; runs the specified command until it exits.&amp;nbsp; It intercepts and records the&amp;nbsp; &lt;b&gt;dynamic library calls&lt;/b&gt; which are called by the executed process and the&amp;nbsp; signals&amp;nbsp; which&amp;nbsp; are&amp;nbsp; received&amp;nbsp; by&amp;nbsp; that &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; process.&amp;nbsp; It can also intercept and print the system calls executed by the program.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
STRACE&lt;br /&gt;
===========================================&lt;br /&gt;
In the simplest case strace runs the specified command until it exits.&amp;nbsp; It intercepts and&amp;nbsp; records&amp;nbsp; the&amp;nbsp; system&amp;nbsp; calls&amp;nbsp; which&amp;nbsp; are called by a process and the signals which are received by a process.&amp;nbsp; The name of each system&amp;nbsp; call, its arguments and its return value are printed on standard error or to the file&amp;nbsp; specified&amp;nbsp; with&amp;nbsp; the&amp;nbsp; -o&amp;nbsp;&amp;nbsp;&amp;nbsp; option.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;nemesis@nemesis-laptop:~/test_code$ strace ./crashcourse&lt;br /&gt;
execve("./crashcourse", ["./crashcourse"], [/* 42 vars */]) = 0&lt;br /&gt;
brk(0)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0x80ba000&lt;br /&gt;
access("/etc/ld.so.nohwcap", F_OK)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = -1 ENOENT (No such file or directory)&lt;br /&gt;
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7846000&lt;br /&gt;
access("/etc/ld.so.preload", R_OK)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = -1 ENOENT (No such file or directory)&lt;br /&gt;
open("/etc/ld.so.cache", O_RDONLY)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 3&lt;br /&gt;
fstat64(3, {st_mode=S_IFREG|0644, st_size=72786, ...}) = 0&lt;br /&gt;
mmap2(NULL, 72786, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7834000&lt;br /&gt;
close(3)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0&lt;br /&gt;
access("/etc/ld.so.nohwcap", F_OK)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = -1 ENOENT (No such file or directory)&lt;br /&gt;
open("/lib/tls/i686/cmov/libc.so.6", O_RDONLY) = 3&lt;br /&gt;
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\260l\1\0004\0\0\0"..., 512) = 512&lt;br /&gt;
fstat64(3, {st_mode=S_IFREG|0755, st_size=1319364, ...}) = 0&lt;br /&gt;
mmap2(NULL, 1325416, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x626000&lt;br /&gt;
mmap2(0x764000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x13e) = 0x764000&lt;br /&gt;
mmap2(0x767000, 10600, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x767000&lt;br /&gt;
close(3)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0&lt;br /&gt;
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7833000&lt;br /&gt;
set_thread_area({entry_number:-1 -&amp;gt; 6, base_addr:0xb78336c0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0&lt;br /&gt;
mprotect(0x764000, 8192, PROT_READ)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0&lt;br /&gt;
mprotect(0x8049000, 4096, PROT_READ)&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0&lt;br /&gt;
mprotect(0x3d0000, 4096, PROT_READ)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0&lt;br /&gt;
munmap(0xb7834000, 72786)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0&lt;br /&gt;
--- SIGSEGV (Segmentation fault) @ 0 (0) ---&lt;br /&gt;
+++ killed by SIGSEGV +++&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
MTRACE&lt;br /&gt;
=============================================&lt;br /&gt;
nemesis@nemesis-laptop:~/test_code$ mtrace ./crashcourse&lt;br /&gt;
No memory leaks&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8629334689063620082-743864143905313082?l=embedded-intelligence.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zNMqnX_st18u_Qrv9raabd1pk0M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zNMqnX_st18u_Qrv9raabd1pk0M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zNMqnX_st18u_Qrv9raabd1pk0M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zNMqnX_st18u_Qrv9raabd1pk0M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Embedded-intelligence/~4/DJssN3hYRVU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://embedded-intelligence.blogspot.com/feeds/743864143905313082/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8629334689063620082&amp;postID=743864143905313082" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/743864143905313082?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/743864143905313082?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Embedded-intelligence/~3/DJssN3hYRVU/miscellaneous-debugging-tips.html" title="Miscellaneous Debugging tips" /><author><name>Nemesis Of The State</name><uri>http://www.blogger.com/profile/08729047479455186451</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="25" src="http://3.bp.blogspot.com/_V6Fx-tfyJms/SNYKC1bHWpI/AAAAAAAAABo/_7qA_h9BszU/S220/ss_kali.bmp" /></author><thr:total>0</thr:total><feedburner:origLink>http://embedded-intelligence.blogspot.com/2009/12/miscellaneous-debugging-tips.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkAAR3w6cCp7ImA9WxBSEUg.&quot;"><id>tag:blogger.com,1999:blog-8629334689063620082.post-1975416197211660369</id><published>2009-12-18T08:45:00.001-08:00</published><updated>2009-12-18T08:45:46.218-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-18T08:45:46.218-08:00</app:edited><title>LibC</title><content type="html">nemesis@nemesis-laptop:/lib$ ./libc.so.6&lt;br /&gt;
GNU C Library (EGLIBC) stable release version 2.10.1, by Roland McGrath et al.&lt;br /&gt;
Copyright (C) 2009 Free Software Foundation, Inc.&lt;br /&gt;
This is free software; see the source for copying conditions.&lt;br /&gt;
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A&lt;br /&gt;
PARTICULAR PURPOSE.&lt;br /&gt;
Compiled by GNU CC version 4.4.1.&lt;br /&gt;
Compiled on a Linux &amp;gt;&amp;gt;2.6.24-23-server&amp;lt;&amp;lt; system on 2009-10-07.&lt;br /&gt;
Available extensions:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; crypt add-on version 2.1 by Michael Glad and others&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GNU Libidn by Simon Josefsson&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Native POSIX Threads Library by Ulrich Drepper et al&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BIND-8.2.3-T5B&lt;br /&gt;
For bug reporting instructions, please see:&lt;br /&gt;
&lt;http: issues="" www.eglibc.org=""&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;/http:&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8629334689063620082-1975416197211660369?l=embedded-intelligence.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ppkKy607c95WOv58tSNtDP_1bpY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ppkKy607c95WOv58tSNtDP_1bpY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ppkKy607c95WOv58tSNtDP_1bpY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ppkKy607c95WOv58tSNtDP_1bpY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Embedded-intelligence/~4/fl3-zkje81M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://embedded-intelligence.blogspot.com/feeds/1975416197211660369/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8629334689063620082&amp;postID=1975416197211660369" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/1975416197211660369?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/1975416197211660369?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Embedded-intelligence/~3/fl3-zkje81M/libc.html" title="LibC" /><author><name>Nemesis Of The State</name><uri>http://www.blogger.com/profile/08729047479455186451</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="25" src="http://3.bp.blogspot.com/_V6Fx-tfyJms/SNYKC1bHWpI/AAAAAAAAABo/_7qA_h9BszU/S220/ss_kali.bmp" /></author><thr:total>0</thr:total><feedburner:origLink>http://embedded-intelligence.blogspot.com/2009/12/libc.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4AQXc7fyp7ImA9WxBSEk4.&quot;"><id>tag:blogger.com,1999:blog-8629334689063620082.post-1193000497324307076</id><published>2009-12-18T08:32:00.000-08:00</published><updated>2009-12-19T07:35:40.907-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-19T07:35:40.907-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="gdb core dump" /><category scheme="http://www.blogger.com/atom/ns#" term="core-dump. enable core dump" /><category scheme="http://www.blogger.com/atom/ns#" term="analysing core dumps" /><title>Core Dump : how to enable &amp; Debug</title><content type="html">1. find out if core will be dumped.&lt;br /&gt;
&lt;br /&gt;
nemesis@nemesis-laptop:~/test_code$ ulimit -c&lt;br /&gt;
0&lt;br /&gt;
&lt;br /&gt;
This means that core will NOT be dumped. ulimit specifies the maximum size of the core file.&lt;br /&gt;
&lt;br /&gt;
2. Now set the value of ulimit to whatever you want it to be&lt;br /&gt;
&lt;br /&gt;
ulimit -c [size]&lt;br /&gt;
&lt;br /&gt;
3.&amp;nbsp; you can also specify the directory in which core files will be placed&lt;br /&gt;
root@nemesis-laptop:/home/nemesis/test_code# echo "/tmp/corefiles/core" &amp;gt; /proc/sys/kernel/core_pattern&lt;br /&gt;
&lt;br /&gt;
4. small program to cause the segmentation fault&lt;br /&gt;
&lt;br /&gt;
###########################################&lt;br /&gt;
#include &lt;stdio.h&gt;&lt;br /&gt;
&lt;br /&gt;
void func2(void)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int *p = NULL;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; *p = 0xdeadcafe;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void func1(void)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; func2();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int main (int argc, char **argv)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; func1();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int *p = NULL;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; *p = 0xdeadcafe;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;/stdio.h&gt;&lt;br /&gt;
##############################################&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
nemesis@nemesis-laptop:~/test_code$ gcc -g -o crashcourse crash_core.c &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. now generate the core file&lt;br /&gt;
nemesis@nemesis-laptop:~/test_code$ ./corefile&lt;br /&gt;
Segmentation fault (core dumped)&lt;br /&gt;
&lt;br /&gt;
6. a bit more details from the file command [Tells you the program which generated the core dump]&lt;br /&gt;
&lt;br /&gt;
nemesis@nemesis-laptop:~/test_code$ file /tmp/corefiles/core&lt;br /&gt;
/tmp/corefiles/core: ELF 32-bit LSB core file Intel 80386, version 1 (SYSV), SVR4-style, from './corefile'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. gdb [executable_file] [core_file]&lt;br /&gt;
&lt;br /&gt;
##################################################&lt;br /&gt;
nemesis@nemesis-laptop:~/test_code$ gdb crashcourse /tmp/corefiles/core&lt;br /&gt;
GNU gdb (GDB) 7.0-ubuntu&lt;br /&gt;
Copyright (C) 2009 Free Software Foundation, Inc.&lt;br /&gt;
License GPLv3+: GNU GPL version 3 or later &lt;http: gnu.org="" gpl.html="" licenses=""&gt;&lt;br /&gt;
This is free software: you are free to change and redistribute it.&lt;br /&gt;
There is NO WARRANTY, to the extent permitted by law.&amp;nbsp; Type "show copying"&lt;br /&gt;
and "show warranty" for details.&lt;br /&gt;
This GDB was configured as "i486-linux-gnu".&lt;br /&gt;
For bug reporting instructions, please see:&lt;br /&gt;
&lt;http: bugs="" gdb="" software="" www.gnu.org=""&gt;...&lt;br /&gt;
Reading symbols from /home/nemesis/test_code/crashcourse...done.&lt;br /&gt;
&lt;br /&gt;
warning: Can't read pathname for load map: Input/output error.&lt;br /&gt;
Reading symbols from /lib/tls/i686/cmov/libc.so.6...(no debugging symbols found)...done.&lt;br /&gt;
Loaded symbols for /lib/tls/i686/cmov/libc.so.6&lt;br /&gt;
Reading symbols from /lib/ld-linux.so.2...(no debugging symbols found)...done.&lt;br /&gt;
Loaded symbols for /lib/ld-linux.so.2&lt;br /&gt;
Core was generated by `./crashcourse'.&lt;br /&gt;
Program terminated with signal 11, Segmentation fault.&lt;br /&gt;
#0&amp;nbsp; 0x080483c4 in func2 () at crash_core.c:6&lt;br /&gt;
6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *p = 0xdeadcafe;&lt;br /&gt;
&lt;/http:&gt;&lt;/http:&gt;&lt;br /&gt;
##################################################&lt;br /&gt;
&lt;br /&gt;
8. Get the backtrace&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(gdb) bt&lt;br /&gt;
#0&amp;nbsp; 0x080483c4 in func2 () at crash_core.c:6&lt;br /&gt;
#1&amp;nbsp; 0x080483d4 in func1 () at crash_core.c:11&lt;br /&gt;
#2&amp;nbsp; 0x080483e1 in main (argc=1, argv=0xbfe81b44) at crash_core.c:17&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
9. use the "up" and "down" commands to go through the code. (you can't run the code remember :) )&lt;br /&gt;
&lt;br /&gt;
==============================================&lt;br /&gt;
UP&lt;br /&gt;
==============================================&lt;br /&gt;
(gdb) up&lt;br /&gt;
#1&amp;nbsp; 0x080483d4 in func1 () at crash_core.c:11&lt;br /&gt;
11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; func2();&lt;br /&gt;
(gdb) up&lt;br /&gt;
#2&amp;nbsp; 0x080483e1 in main (argc=1, argv=0xbfe81b44) at crash_core.c:17&lt;br /&gt;
17&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; func1();&lt;br /&gt;
(gdb) up&lt;br /&gt;
Initial frame selected; you cannot go up.&lt;br /&gt;
&lt;br /&gt;
===============================================&lt;br /&gt;
DOWN&lt;br /&gt;
===============================================&lt;br /&gt;
(gdb) down&lt;br /&gt;
#1&amp;nbsp; 0x080483d4 in func1 () at crash_core.c:11&lt;br /&gt;
11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; func2();&lt;br /&gt;
(gdb) down&lt;br /&gt;
#0&amp;nbsp; 0x080483c4 in func2 () at crash_core.c:6&lt;br /&gt;
6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *p = 0xdeadcafe;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=========================================&lt;br /&gt;
NOTE: What if somebody handed you a core file and you don't the crashing process ? Happens a lot of times when the test team would pass you the core file and wash their hands off the issue altogether :)&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
1. from the (file) following command&lt;br /&gt;
&lt;br /&gt;
file [CORE-FILE]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;nemesis@nemesis-laptop:~/test_code$ file /tmp/corefiles/core&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;/tmp/corefiles/core: ELF 32-bit LSB core file Intel 80386, version 1 (SYSV), SVR4-style, from './corefile'&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
2. just load the core file in gdb with "any" program name.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;nemesis@nemesis-laptop:~/test_code$ gdb /bin/ps /tmp/corefiles/core&lt;/span&gt;&lt;br style="font-family: Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;GNU gdb (GDB) 7.0-ubuntu&lt;/span&gt;&lt;br style="font-family: Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Copyright (C) 2009 Free Software Foundation, Inc.&lt;/span&gt;&lt;br style="font-family: Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;License GPLv3+: GNU GPL version 3 or later &lt;http: gnu.org="" gpl.html="" licenses=""&gt;&lt;/http:&gt;&lt;/span&gt;&lt;br style="font-family: Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;This is free software: you are free to change and redistribute it.&lt;/span&gt;&lt;br style="font-family: Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;There is NO WARRANTY, to the extent permitted by law.&amp;nbsp; Type "show copying"&lt;/span&gt;&lt;br style="font-family: Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;and "show warranty" for details.&lt;/span&gt;&lt;br style="font-family: Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;This GDB was configured as "i486-linux-gnu".&lt;/span&gt;&lt;br style="font-family: Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;For bug reporting instructions, please see:&lt;/span&gt;&lt;br style="font-family: Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;http: bugs="" gdb="" software="" www.gnu.org=""&gt;...&lt;/http:&gt;&lt;/span&gt;&lt;br style="font-family: Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Reading symbols from /bin/ps...(no debugging symbols found)...done.&lt;/span&gt;&lt;br style="font-family: Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-size: small;"&gt;&lt;br style="font-family: Arial,Helvetica,sans-serif;" /&gt;&lt;b&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;warning: core file may not match specified executable file.&lt;/span&gt;&lt;/b&gt;&lt;br style="font-family: Arial,Helvetica,sans-serif;" /&gt;&lt;b&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Core was generated by `./crashcourse'.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br style="font-family: Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;Program terminated with signal 11, Segmentation fault.&lt;/span&gt;&lt;br style="font-family: Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;#0&amp;nbsp; 0x080483c4 in ?? ()&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
GDB is intelligent enough to catch your bluff but the good that comes out of it is that it tells you the correct name of the program that core-d. (GDB can't tell if your bluffing or plain ignorant :))&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8629334689063620082-1193000497324307076?l=embedded-intelligence.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6DdpUj1q2RlvbMs_1HZXCSrrKP0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6DdpUj1q2RlvbMs_1HZXCSrrKP0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6DdpUj1q2RlvbMs_1HZXCSrrKP0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6DdpUj1q2RlvbMs_1HZXCSrrKP0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Embedded-intelligence/~4/wQMx1JblzME" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://embedded-intelligence.blogspot.com/feeds/1193000497324307076/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8629334689063620082&amp;postID=1193000497324307076" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/1193000497324307076?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/1193000497324307076?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Embedded-intelligence/~3/wQMx1JblzME/core-dump-how-to-enable-debug.html" title="Core Dump : how to enable &amp; Debug" /><author><name>Nemesis Of The State</name><uri>http://www.blogger.com/profile/08729047479455186451</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="25" src="http://3.bp.blogspot.com/_V6Fx-tfyJms/SNYKC1bHWpI/AAAAAAAAABo/_7qA_h9BszU/S220/ss_kali.bmp" /></author><thr:total>0</thr:total><feedburner:origLink>http://embedded-intelligence.blogspot.com/2009/12/core-dump-how-to-enable-debug.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcMQH8_fCp7ImA9WxBTF0Q.&quot;"><id>tag:blogger.com,1999:blog-8629334689063620082.post-8674080797004852644</id><published>2009-12-13T13:00:00.000-08:00</published><updated>2009-12-14T03:28:01.144-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-14T03:28:01.144-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="git" /><category scheme="http://www.blogger.com/atom/ns#" term="global setting git" /><category scheme="http://www.blogger.com/atom/ns#" term="email username settings git" /><title>GIT Guide --- update</title><content type="html">&lt;span style="font-size:85%;"&gt;Before your commits make sure you have these variables defined. :)&lt;br /&gt;==================================================&lt;br /&gt;nemesis@nemesis-laptop:~/qemu/qemu$ git config --global user.name "nemesisofstate"&lt;br /&gt;nemesis@nemesis-laptop:~/qemu/qemu$ git config --global user.email "nemesisofstate@gmail.com"&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;for checkin&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;========&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;edit [file]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;git add [file]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;git commit -m "your-message-here" -s &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: serif; font-size: medium; "&gt;&lt;dt style="margin-top: 0.5em; margin-bottom: 0px; font-style: italic; "&gt;-s&lt;/dt&gt;&lt;dt style="margin-top: 0.5em; margin-bottom: 0px; font-style: italic; "&gt;--signoff&lt;/dt&gt;&lt;dd&gt;&lt;p style="margin-top: 0px; margin-bottom: 0.5em; "&gt;Add Signed-off-by line by the committer at the end of the commit log message.&lt;/p&gt;&lt;/dd&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;======================&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;see your patch&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;git format-patch origin/master&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;your messages&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;===============&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;git show &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;gitk ===&gt; graphic tool for git &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Send out your patch&lt;/div&gt;&lt;div&gt;================&lt;/div&gt;&lt;div&gt;I use gmail to send my patches ...so u need msmtp for it [http://msmtp.sourceforge.net]. Install the file and configure your ~/.msmtprc file&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;git-config --global sendemail.smtpserver /usr/local/bin/msmtp&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;sudo apt-get install git-email&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;git email-send &lt;file&gt;&lt;/file&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;e.g&lt;/div&gt;&lt;div&gt;nemesis@nemesis-laptop:~/qemu/qemu$ git send-email 0001-correcting-ARM-CPSR-register-bit-position-comment.patch&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8629334689063620082-8674080797004852644?l=embedded-intelligence.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XmIqXkb6yJ7LB0weSr-L8lT6ISs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XmIqXkb6yJ7LB0weSr-L8lT6ISs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XmIqXkb6yJ7LB0weSr-L8lT6ISs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XmIqXkb6yJ7LB0weSr-L8lT6ISs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Embedded-intelligence/~4/fRnalPjj_qM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://embedded-intelligence.blogspot.com/feeds/8674080797004852644/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8629334689063620082&amp;postID=8674080797004852644" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/8674080797004852644?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/8674080797004852644?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Embedded-intelligence/~3/fRnalPjj_qM/git-guide-update.html" title="GIT Guide --- update" /><author><name>Nemesis Of The State</name><uri>http://www.blogger.com/profile/08729047479455186451</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="25" src="http://3.bp.blogspot.com/_V6Fx-tfyJms/SNYKC1bHWpI/AAAAAAAAABo/_7qA_h9BszU/S220/ss_kali.bmp" /></author><thr:total>0</thr:total><feedburner:origLink>http://embedded-intelligence.blogspot.com/2009/12/git-guide-update.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQAQH88cCp7ImA9WxBTF08.&quot;"><id>tag:blogger.com,1999:blog-8629334689063620082.post-2830677402737289143</id><published>2009-12-13T08:04:00.000-08:00</published><updated>2009-12-13T08:05:41.178-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-13T08:05:41.178-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux kernel headers" /><title>HOWTO: Get specific linux kernel headers</title><content type="html">On UBUNTU&lt;br /&gt;&lt;br /&gt;&lt;pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 640px; height: 34px; text-align: left;"&gt;sudo apt-get install linux-headers-$(uname -r)&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8629334689063620082-2830677402737289143?l=embedded-intelligence.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9vvR7r5uU4oy_CVaHjTlk5Ppnvs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9vvR7r5uU4oy_CVaHjTlk5Ppnvs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9vvR7r5uU4oy_CVaHjTlk5Ppnvs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9vvR7r5uU4oy_CVaHjTlk5Ppnvs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Embedded-intelligence/~4/Pke6y7WU6yA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://embedded-intelligence.blogspot.com/feeds/2830677402737289143/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8629334689063620082&amp;postID=2830677402737289143" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/2830677402737289143?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/2830677402737289143?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Embedded-intelligence/~3/Pke6y7WU6yA/howto-get-specific-linux-kernel-headers.html" title="HOWTO: Get specific linux kernel headers" /><author><name>Nemesis Of The State</name><uri>http://www.blogger.com/profile/08729047479455186451</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="25" src="http://3.bp.blogspot.com/_V6Fx-tfyJms/SNYKC1bHWpI/AAAAAAAAABo/_7qA_h9BszU/S220/ss_kali.bmp" /></author><thr:total>0</thr:total><feedburner:origLink>http://embedded-intelligence.blogspot.com/2009/12/howto-get-specific-linux-kernel-headers.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkENSXY_eyp7ImA9WxBTF0w.&quot;"><id>tag:blogger.com,1999:blog-8629334689063620082.post-5829791757429238374</id><published>2009-12-12T14:32:00.000-08:00</published><updated>2009-12-13T06:31:38.843-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-13T06:31:38.843-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="UBOOT" /><category scheme="http://www.blogger.com/atom/ns#" term="QEMU with U-boot" /><category scheme="http://www.blogger.com/atom/ns#" term="ARM QEMU UBOOT" /><title>QEMU + U-BOOT</title><content type="html">1. Get the U-Boot sources&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2. &lt;b&gt;sudo apt-get install qemu-kvm-extras&lt;/b&gt; [for qemu-system-arm]&lt;/div&gt;&lt;div&gt;We will compile for ARM (needless to say) target---ARM versatile board (needless again)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;[NOTE]: &lt;b&gt;[u-boot-dir]&lt;/b&gt;&lt;u-boot-source&gt;&lt;b&gt;/include/configs&lt;/b&gt; contains the default configs for most of the platforms. It almost corresponds to the one in linux kernel sources.&lt;br /&gt;&lt;br /&gt;STEPS&lt;br /&gt;=======&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. make versatile_config&lt;br /&gt;2. make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-&lt;/b&gt;&lt;br /&gt;make ....make....make...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;[NOTE]:&lt;/b&gt; Uboot needs the linux with uboot specific headers in order to boot it. This u-boot specific image can be generated using "&lt;b&gt;make uImage&lt;/b&gt;".&lt;/u-boot-source&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;u-boot-source&gt;However this would need mkimage. Where do we get it from--- &lt;/u-boot-source&gt;&lt;/div&gt;&lt;div&gt;&lt;u-boot-source&gt;Easy:) &lt;/u-boot-source&gt;&lt;/div&gt;&lt;div&gt;&lt;u-boot-source&gt;     ----  after running make you can find the mkimage in &lt;b&gt;[u-boot-dir]&lt;/b&gt;&lt;b&gt;&lt;u-boot-dir&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;/&lt;/span&gt;tools&lt;/u-boot-dir&gt;&lt;/b&gt; directory.&lt;/u-boot-source&gt;&lt;/div&gt;&lt;div&gt;     ---- Or get it from sudo apt-get install &lt;b&gt;uboot-mkimage&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;u-boot-source&gt;&lt;br /&gt;3. Launch&lt;br /&gt;&lt;b&gt;sudo qemu-system-arm -nographic -m 256 -M versatileab -kernel u-boot.bin&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The above command is good if your testing u-boot as a standalone app. However it would be wonderful to have networking between host and target to boot a linux kernel&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;sudo qemu-system-arm -M versatileab -kernel u-boot -net nic -net tap -nographic -serial stdio&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Don't worry about the error message we will get to it.&lt;br /&gt;===================================================&lt;br /&gt;nemesis@nemesis-laptop:~/u-boot-2009.08$ sudo qemu-system-arm -nographic -m 256 -M versatileab -kernel u-boot.bin&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;U-Boot 2009.08 (Dec 13 2009 - 00:28:50)&lt;br /&gt;&lt;br /&gt;DRAM:   0 kB&lt;br /&gt;## Unknown FLASH on Bank 1 - Size = 0x00000000 = 0 MB&lt;br /&gt;Flash:  0 kB&lt;br /&gt;*** Warning - bad CRC, using default environment&lt;br /&gt;&lt;br /&gt;In:    serial&lt;br /&gt;Out:   serial&lt;br /&gt;Err:   serial&lt;br /&gt;&lt;/u-boot-source&gt;&lt;br /&gt;===================================================&lt;br /&gt;&lt;br /&gt;Build linux kernel Image for U-boot&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;                                &lt;br /&gt;nemesis@nemesis-laptop:~/linux_kernel/linux-2.6.32$ make uImage&lt;br /&gt;CHK     include/linux/version.h                           &lt;br /&gt;make[1]: `include/asm-arm/mach-types.h' is up to date.      &lt;br /&gt;CHK     include/linux/utsrelease.h                        &lt;br /&gt;SYMLINK include/asm -&gt; include/asm-arm                    &lt;br /&gt;CALL    scripts/checksyscalls.sh                          &lt;br /&gt;MKELF   scripts/mod/elfconfig.h                           &lt;br /&gt;HOSTCC  scripts/mod/file2alias.o                          &lt;br /&gt;HOSTCC  scripts/mod/modpost.o                             &lt;br /&gt;scripts/mod/modpost.c: In function ‘get_markers’:           &lt;br /&gt;scripts/mod/modpost.c:1562: warning: ignoring return value of ‘asprintf’, declared with attribute warn_unused_result                                         &lt;br /&gt;scripts/mod/modpost.c: In function ‘add_marker’:                             &lt;br /&gt;scripts/mod/modpost.c:1982: warning: ignoring return value of ‘asprintf’, declared with attribute warn_unused_result                                         &lt;br /&gt;HOSTCC  scripts/mod/sumversion.o                                           &lt;br /&gt;HOSTLD  scripts/mod/modpost                                                &lt;br /&gt;CHK     include/linux/compile.h                                            &lt;br /&gt;GEN     lib/crc32table.h                                                   &lt;br /&gt;CC      lib/crc32.o                                                        &lt;br /&gt;LD      lib/built-in.o                                                     &lt;br /&gt;LD      vmlinux.o                                                          &lt;br /&gt;MODPOST vmlinux.o                                                          &lt;br /&gt;GEN     .version                                                           &lt;br /&gt;CHK     include/linux/compile.h                                            &lt;br /&gt;UPD     include/linux/compile.h                                            &lt;br /&gt;CC      init/version.o                                                     &lt;br /&gt;LD      init/built-in.o                                                    &lt;br /&gt;LD      .tmp_vmlinux1                                                      &lt;br /&gt;KSYM    .tmp_kallsyms1.S                                                   &lt;br /&gt;AS      .tmp_kallsyms1.o                                                   &lt;br /&gt;LD      .tmp_vmlinux2                                                      &lt;br /&gt;KSYM    .tmp_kallsyms2.S                                                   &lt;br /&gt;AS      .tmp_kallsyms2.o                                                   &lt;br /&gt;LD      vmlinux                                                            &lt;br /&gt;SYSMAP  System.map                                                         &lt;br /&gt;SYSMAP  .tmp_System.map                                                    &lt;br /&gt;OBJCOPY arch/arm/boot/Image                                                &lt;br /&gt;Kernel: arch/arm/boot/Image is ready                                       &lt;br /&gt;GZIP    arch/arm/boot/compressed/piggy.gz                                  &lt;br /&gt;AS      arch/arm/boot/compressed/piggy.o                                   &lt;br /&gt;LD      arch/arm/boot/compressed/vmlinux                                   &lt;br /&gt;OBJCOPY arch/arm/boot/zImage                                               &lt;br /&gt;Kernel: arch/arm/boot/zImage is ready                                      &lt;br /&gt;&lt;span style="font-weight: bold;"&gt;  UIMAGE  arch/arm/boot/uImage                                                  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Image Name:   Linux-2.6.32                                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Created:      Sun Dec 13 02:29:45 2009                                          &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Image Type:   ARM Linux Kernel Image (uncompressed)                             &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Data Size:    1535396 Bytes = 1499.41 kB = 1.46 MB                              &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Load Address: 00008000                                                          &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Entry Point:  00008000                                                          &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;  Image arch/arm/boot/uImage is ready&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;GET READY TO BOOT YOUR LINUX KERNEL&lt;br /&gt;======================================&lt;br /&gt;&lt;br /&gt;VersatilePB # setenv ipaddr 10.0.2.16    &lt;br /&gt;VersatilePB # setenv serverip 10.0.2.15&lt;br /&gt;VersatilePB # ping 10.0.2.15&lt;br /&gt;SMC91111: PHY auto-negotiate timed out&lt;br /&gt;Using MAC Address 52:54:00:12:34:56&lt;br /&gt;host 10.0.2.15 is alive&lt;br /&gt;VersatilePB # tftp 8000 uImage&lt;br /&gt;SMC91111: PHY auto-negotiate timed out&lt;br /&gt;Using MAC Address 52:54:00:12:34:56&lt;br /&gt;TFTP from server 10.0.2.15; our IP address is 10.0.2.16&lt;br /&gt;Filename 'uImage'.&lt;br /&gt;Load address: 0x8000&lt;br /&gt;Loading: T T T T T T T #################################################################&lt;br /&gt;        ###T #####################################&lt;br /&gt;done&lt;br /&gt;Bytes transferred = 1535460 (176de4 hex)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PROBLEM: There seems to be a bug in the sense that DRAM setting are not correct for versatile.&lt;br /&gt;&lt;br /&gt;Switching to Integrator platform. [build uboot and linux image for integrator]&lt;br /&gt;(uboot config =====&gt; integratorcp_config)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;font-size:85%;" &gt;nemesis@nemesis-laptop:~/u-boot-2009.08$ sudo qemu-system-arm -kernel u-boot -net nic -net tap -nographic -serial stdio                                        &lt;br /&gt;[sudo] password for nemesis:                                                   &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;U-Boot 2009.08 (Dec 13 2009 - 04:00:17)&lt;br /&gt;&lt;br /&gt;DRAM:  128 MB&lt;br /&gt;## Unknown FLASH on Bank 1 - Size = 0x00000000 = 0 MB&lt;br /&gt;Flash:  0 kB                                        &lt;br /&gt;*** Warning - bad CRC, using default environment    &lt;br /&gt;&lt;br /&gt;In:    serial&lt;br /&gt;Out:   serial&lt;br /&gt;Err:   serial&lt;br /&gt;Hit any key to stop autoboot:  0&lt;br /&gt;Integrator-CP # setenv serverip 10.0.2.15&lt;br /&gt;Integrator-CP # setenv ipaddr 10.0.2.16&lt;br /&gt;Integrator-CP # tftp 8000 uImage&lt;br /&gt;SMC91111: PHY auto-negotiate timed out&lt;br /&gt;Using MAC Address 52:54:00:12:34:56&lt;br /&gt;TFTP from server 10.0.2.15; our IP address is 10.0.2.16&lt;br /&gt;Filename 'uImage'.&lt;br /&gt;Load address: 0x8000&lt;br /&gt;Loading: T T #################################################################&lt;br /&gt;         ################################&lt;br /&gt;done&lt;br /&gt;Bytes transferred = 1411276 (1588cc hex)&lt;br /&gt;Integrator-CP # bootm&lt;br /&gt;## Booting kernel from Legacy Image at 00008000 ...&lt;br /&gt;   Image Name:   Linux-2.6.32&lt;br /&gt;   Image Type:   ARM Linux Kernel Image (uncompressed)&lt;br /&gt;   Data Size:    1411212 Bytes =  1.3 MB&lt;br /&gt;   Load Address: 00008000&lt;br /&gt;   Entry Point:  00008000&lt;br /&gt;   XIP Kernel Image ... OK&lt;br /&gt;OK&lt;br /&gt;&lt;br /&gt;Starting kernel ...&lt;br /&gt;&lt;br /&gt;qemu: fatal: Trying to execute code outside RAM or ROM at 0xfffff1c2&lt;br /&gt;&lt;br /&gt;R00=00000000 R01=00000107 R02=00000100 R03=00000002&lt;br /&gt;R04=00fddfc0 R05=00000000 R06=00008000 R07=00000113&lt;br /&gt;R08=00fddfdc R09=010172c0 R10=010176ac R11=00fddced&lt;br /&gt;R12=0100f750 R13=00000000 R14=00008008 R15=fffff1c2&lt;br /&gt;PSR=600001db -ZC- A und32&lt;br /&gt;Aborted&lt;br /&gt;nemesis@nemesis-laptop:~/u-boot-2009.08$&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;============================================&lt;br /&gt;&lt;br /&gt;So far so good...Uboot passes control to linux kernel but the kernel boot does a crash and burn. Will need to solve this one now....&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8629334689063620082-5829791757429238374?l=embedded-intelligence.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mLelnrCSC0A_nRRrcVP53wiMcqo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mLelnrCSC0A_nRRrcVP53wiMcqo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mLelnrCSC0A_nRRrcVP53wiMcqo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mLelnrCSC0A_nRRrcVP53wiMcqo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Embedded-intelligence/~4/EuiHSsH1HfI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://embedded-intelligence.blogspot.com/feeds/5829791757429238374/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8629334689063620082&amp;postID=5829791757429238374" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/5829791757429238374?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/5829791757429238374?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Embedded-intelligence/~3/EuiHSsH1HfI/qemu-u-boot.html" title="QEMU + U-BOOT" /><author><name>Nemesis Of The State</name><uri>http://www.blogger.com/profile/08729047479455186451</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="25" src="http://3.bp.blogspot.com/_V6Fx-tfyJms/SNYKC1bHWpI/AAAAAAAAABo/_7qA_h9BszU/S220/ss_kali.bmp" /></author><thr:total>0</thr:total><feedburner:origLink>http://embedded-intelligence.blogspot.com/2009/12/qemu-u-boot.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcDR3c8eSp7ImA9WxBTEkw.&quot;"><id>tag:blogger.com,1999:blog-8629334689063620082.post-1152795362032334944</id><published>2009-12-06T02:33:00.000-08:00</published><updated>2009-12-07T12:34:36.971-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-07T12:34:36.971-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="busybox" /><category scheme="http://www.blogger.com/atom/ns#" term="busybox root file system" /><category scheme="http://www.blogger.com/atom/ns#" term="how to build your own busybox system" /><category scheme="http://www.blogger.com/atom/ns#" term="installing modules in rootfs" /><title>Busybox</title><content type="html">1. Download the source and patches from the busybox website.&lt;br /&gt;&lt;br /&gt;http://www.busybox.net/download.html&lt;br /&gt;&lt;br /&gt;The version at the time of writing this is 1.14.1.&lt;br /&gt;&lt;br /&gt;2. untar the sources to the directory where you will run the build.&lt;br /&gt;&lt;br /&gt;3. patch the sources&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;patch -p0 &lt;&gt;.patch&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;e.g  patch -p0 &lt;&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;4. config the busybox using your favourite config method. I prefer to use xconfig.&lt;br /&gt;&lt;br /&gt;5. make your day :)  -------- run make&lt;br /&gt;&lt;br /&gt;6. once the make has run successful , you would want to install the busybox in a seperate directory which you can later ready to use as the rootfs.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;make CONFIG_PREFIX=~/busybox/target install&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;where I am installing busybox in the /home/nemesis/busybox/target directory&lt;br /&gt;&lt;br /&gt;7 cd to the install directory&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;cd &lt;span style="font-weight: bold;"&gt;~/busybox/target&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;8. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;There isn't a great deal there&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;ls -al would return&lt;br /&gt;&lt;br /&gt;sbin, bin , usr and linuxrc (a symbolic link to /bin/busybox)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;9. Create the dev, dev/pts, etc, etc/init.d, lib, mnt, opt, proc, root, sys, tmp, var, and var/log directories. Also create the device node for the initial console&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;mkdir dev etc lib mnt opt proc root sys tmp var debug&lt;br /&gt;mkdir etc/init.d&lt;br /&gt;mkdir var/log&lt;br /&gt;&lt;br /&gt;sudo mknod dev/console c 5 1&lt;br /&gt;sudo mknod dev/null c 1 3&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;10. Mount proc and /dev/pts at boot time&lt;br /&gt;===========================&lt;br /&gt;&lt;br /&gt;edit /etc/fstab for these filesystems&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;11. Shared library and library loader&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;==========================&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;We still need the&lt;br /&gt;---------- shared libraries (from your toolchain)&lt;br /&gt;---------- library loader (e.g ld-linux.so.3 in the listing below)&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;nemesis@nemesis-laptop:~/codesourcery/arm-2009q3/arm-none-linux-gnueabi/libc/lib$ ls&lt;br /&gt;ld-2.10.1.so               libdl-2.10.1.so          libnss_dns.so.2           libresolv-2.10.1.so&lt;br /&gt;ld-linux.so.3              libdl.so.2               libnss_files-2.10.1.so    libresolv.so.2&lt;br /&gt;libanl-2.10.1.so           libgcc_s.so              libnss_files.so.2         librt-2.10.1.so&lt;br /&gt;libanl.so.1                libgcc_s.so.1            libnss_hesiod-2.10.1.so   librt.so.1&lt;br /&gt;libBrokenLocale-2.10.1.so  libm-2.10.1.so           libnss_hesiod.so.2        libSegFault.so&lt;br /&gt;libBrokenLocale.so.1       libmemusage.so           libnss_nis-2.10.1.so      libthread_db-1.0.so&lt;br /&gt;libc-2.10.1.so             libm.so.6                libnss_nisplus-2.10.1.so  libthread_db.so.1&lt;br /&gt;libcidn-2.10.1.so          libnsl-2.10.1.so         libnss_nisplus.so.2       libutil-2.10.1.so&lt;br /&gt;libcidn.so.1               libnsl.so.1              libnss_nis.so.2           libutil.so.1&lt;br /&gt;libcrypt-2.10.1.so         libnss_compat-2.10.1.so  libpcprofile.so&lt;br /&gt;libcrypt.so.1              libnss_compat.so.2       libpthread-2.10.1.so&lt;br /&gt;libc.so.6                  libnss_dns-2.10.1.so     libpthread.so.0&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;--- that's an aweful lot. Copying them indiscriminately will cause our rootfs to be bloated (something we don't want). So just pick what you need.  And And And ofcourse strip these libraries :)&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;nemesis@nemesis-laptop:~/busybox/target/lib$ ~/codesourcery/arm-2009q3/bin/arm-none-linux-gnueabi-strip *&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;Thats the minimal set for the rootfs&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;12. Kernel Modules&lt;br /&gt;=================&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Now it is time to get our dear modules.&lt;br /&gt;&lt;br /&gt;--- go to the kernel build directory&lt;br /&gt;--- issue the following command : make modules&lt;br /&gt;&lt;br /&gt;after it has completed successfully , we need to install the modules in our rootfs. Elementary my dear watson!&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;pre&gt;&lt;span style="font-weight: bold;"&gt;make INSTALL_MOD_PATH=/path/to/rootfs modules_install&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Once we are out of the debugging phase, we would like to strip the modules to slim down.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;cd /path/to/rootfs/lib/modules&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;arm-none-linux-gnueabi-strip `find . –name “*.ko”`&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;   &lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8629334689063620082-1152795362032334944?l=embedded-intelligence.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/DlqrpQ26atiRfX_MFr8MWxB8zt0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DlqrpQ26atiRfX_MFr8MWxB8zt0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/DlqrpQ26atiRfX_MFr8MWxB8zt0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DlqrpQ26atiRfX_MFr8MWxB8zt0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Embedded-intelligence/~4/DkNZqOqnpv4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://embedded-intelligence.blogspot.com/feeds/1152795362032334944/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8629334689063620082&amp;postID=1152795362032334944" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/1152795362032334944?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/1152795362032334944?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Embedded-intelligence/~3/DkNZqOqnpv4/1.html" title="Busybox" /><author><name>Nemesis Of The State</name><uri>http://www.blogger.com/profile/08729047479455186451</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="25" src="http://3.bp.blogspot.com/_V6Fx-tfyJms/SNYKC1bHWpI/AAAAAAAAABo/_7qA_h9BszU/S220/ss_kali.bmp" /></author><thr:total>0</thr:total><feedburner:origLink>http://embedded-intelligence.blogspot.com/2009/12/1.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YDQ3Yzfyp7ImA9WxBTEEQ.&quot;"><id>tag:blogger.com,1999:blog-8629334689063620082.post-3452716186381960738</id><published>2009-12-06T00:06:00.000-08:00</published><updated>2009-12-06T02:26:12.887-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-06T02:26:12.887-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="busybox" /><category scheme="http://www.blogger.com/atom/ns#" term="JFFS2" /><category scheme="http://www.blogger.com/atom/ns#" term="initrd" /><category scheme="http://www.blogger.com/atom/ns#" term="root file system" /><category scheme="http://www.blogger.com/atom/ns#" term="rootfs" /><category scheme="http://www.blogger.com/atom/ns#" term="ramdisk" /><category scheme="http://www.blogger.com/atom/ns#" term="JFFS" /><category scheme="http://www.blogger.com/atom/ns#" term="CRAMFS" /><title>Root File System</title><content type="html">Umpteen ways to get this done :-&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1.  NFS Mounted.  [One of the most popular methods ]&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2.  Initial RAMDISK (Initrd) ====&gt; Will cover this in more detail in a later post&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3. JFFS/JFFS2&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;4. CRAMFS (Read-only)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We will use busybox -- the veritable "Swiss Army Knife" for embedded systems.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Each of these will be explained in seperate posts, starting with Busybox&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8629334689063620082-3452716186381960738?l=embedded-intelligence.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5h2e30Y7kaGrLf6I_wnaAcIzWyA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5h2e30Y7kaGrLf6I_wnaAcIzWyA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5h2e30Y7kaGrLf6I_wnaAcIzWyA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5h2e30Y7kaGrLf6I_wnaAcIzWyA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Embedded-intelligence/~4/H3l7Vkye5q4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://embedded-intelligence.blogspot.com/feeds/3452716186381960738/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8629334689063620082&amp;postID=3452716186381960738" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/3452716186381960738?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/3452716186381960738?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Embedded-intelligence/~3/H3l7Vkye5q4/root-file-system.html" title="Root File System" /><author><name>Nemesis Of The State</name><uri>http://www.blogger.com/profile/08729047479455186451</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="25" src="http://3.bp.blogspot.com/_V6Fx-tfyJms/SNYKC1bHWpI/AAAAAAAAABo/_7qA_h9BszU/S220/ss_kali.bmp" /></author><thr:total>0</thr:total><feedburner:origLink>http://embedded-intelligence.blogspot.com/2009/12/root-file-system.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8ERXsyfCp7ImA9WxBTGE8.&quot;"><id>tag:blogger.com,1999:blog-8629334689063620082.post-8709204199092480906</id><published>2009-12-05T11:53:00.000-08:00</published><updated>2009-12-14T12:33:24.594-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-14T12:33:24.594-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ARM linux on Versatile" /><category scheme="http://www.blogger.com/atom/ns#" term="ARM Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="QEMU" /><category scheme="http://www.blogger.com/atom/ns#" term="arm linux on QEMU" /><category scheme="http://www.blogger.com/atom/ns#" term="DHCP" /><title>ARM on QEMU</title><content type="html">Goal : Run linux on a verstaline board (simulated by QEMU)&lt;br /&gt;&lt;br /&gt;why : Because it is not always possible to have the real board available for development.&lt;br /&gt;&lt;br /&gt;Prerequisites:&lt;br /&gt;==============&lt;br /&gt;&lt;br /&gt;1. QEMU : ofcourse&lt;br /&gt;on debian systems : sudo apt-get install qemu&lt;br /&gt;on RH systems :      sudo yum install qemu&lt;br /&gt;&lt;br /&gt;2. This one depends on what kind of communication mechanism is used between the host (your development) system and the guest sytem on QEMU. I prefer to use networking.&lt;br /&gt;&lt;br /&gt;---- Have DHCP running so that guest system on qemu can use it to get an IP address.&lt;br /&gt;---- host TAP devices used to connect to QEMU. The kernel config of the host should have TAP/TUN networking enabled. The switch for this is &lt;span style="font-weight: bold;"&gt;CONFIG_TUN&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;grep CONFIG_TUN= /boot/config-`uname -r`&lt;br /&gt;&lt;br /&gt;This should return you the state of the switch.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;nemesis@nemesis-laptop:~$ grep CONFIG_TUN= /boot/config-`uname -r`&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;CONFIG_TUN=m&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;nemesis@nemesis-laptop:~$ ls -al /dev/net/tun&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;crw-rw-rw- 1 root root 10, 200 2009-11-03 11:46 /dev/net/tun&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This verifies that the device exists indeed. If not, create it manually.&lt;br /&gt;&lt;br /&gt;mknod /dev/net/tun c 10 200&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Configure bridge-control&lt;br /&gt;==================&lt;br /&gt;Add the following to a script file&lt;br /&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;/usr/sbin/brctl addbr br0                      ### Add a bridge&lt;br /&gt;/sbin/ifconfig eth0 0.0.0.0 promisc up   ### set up eth0&lt;br /&gt;/usr/sbin/brctl addif br0 eth0                 ### add an intf(eth0) to the bridge (br0)&lt;br /&gt;/sbin/dhclient br0                                  ### enable dhcp&lt;br /&gt;/sbin/iptables -F FORWARD&lt;br /&gt;&lt;br /&gt;Build kernel&lt;br /&gt;=========&lt;br /&gt;&lt;br /&gt;The quickest way is to use the default config file for the versatile platform.&lt;br /&gt;Simply copy the config file from configs directory for ARM arch and rename it as .config&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;cp &lt;linux-dir&gt;/arch/arm/configs/versatile_defconfig  &lt;linux-dir&gt;/.config&lt;/linux-dir&gt;&lt;/linux-dir&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Config the Linux kernel (xconfig, menuconfig or simply using vim to edit..have it your way)&lt;br /&gt;&lt;br /&gt;   1. Enable ARM EABI support : switch CONFIG_AEABI (part of kernel features)&lt;br /&gt;   2. Enable DHCP : Switch CONFIG_IP_PNP_DHCP&lt;br /&gt;   3. Enable Universal TUN/TAP driver : switch CONFIG_TUN&lt;br /&gt;   4. Enable tmpfs : Switch CONFIG_TMPFS&lt;br /&gt;&lt;br /&gt;Now we are ready to make (my day)&lt;br /&gt;Ofcourse ARCH = arm&lt;br /&gt;and CROSS_COMPILE = your_cross_compiler (I use codesourcery and for me it is&lt;br /&gt;arm-none-linux-gnueabi-)&lt;br /&gt;&lt;br /&gt;What about the Root File System ?&lt;br /&gt;=======================&lt;br /&gt;&lt;br /&gt;We will NFS mount the root filesystem. Build your rootfs.&lt;br /&gt;&lt;br /&gt;1. edit /etc/exports ===&gt; Add the following line&lt;br /&gt;&lt;br /&gt;/mnt/arm-linux-rootfs / *(rw,sync,no_root_squash)&lt;br /&gt;&lt;br /&gt;Here the untarred rootfs is at /mnt/arm-linux-rootfs and it is accessible as rw filesystem from any systems (indicated by *). If static ip-addresses are assigned, use the ip-address of the peer here.&lt;br /&gt;&lt;br /&gt;2. restart the nfs service so that our changes come into effect.&lt;br /&gt;&lt;br /&gt;/etc/init.d/nfs restart&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Boot into Linux on QEMU&lt;br /&gt;======================&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;qemu-system-arm -M versatilepb -kernel zImage-versatile -append root="/dev/nfs nfsroot=&lt;host-ip&gt;:/mnt/arm-linux-rootfs rw ip=dhcp" \&lt;br /&gt;-net nic,vlan=0 -net tap,vlan=0,ifname=tap0,script=./qemu-ifup&lt;br /&gt;&lt;/host-ip&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;qemu-ifup&lt;br /&gt;=============================&lt;br /&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;     echo "Executing /etc/qemu-ifup"&lt;br /&gt;     echo "Bringing up $1 for bridged mode..."&lt;br /&gt;     sudo /sbin/ifconfig $1 0.0.0.0 promisc up&lt;br /&gt;     echo "Adding $1 to br0..."&lt;br /&gt;     sudo /usr/sbin/brctl addif br0 $1&lt;br /&gt;     sleep 2   &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Source : http://fedoraproject.org/wiki/Architectures/ARM/HowToQemu&lt;br /&gt;              http://www.aurel32.net/info/debian_arm_qemu.php&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8629334689063620082-8709204199092480906?l=embedded-intelligence.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5_TSblCuxrOpdH32GiDYOZmkpvY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5_TSblCuxrOpdH32GiDYOZmkpvY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5_TSblCuxrOpdH32GiDYOZmkpvY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5_TSblCuxrOpdH32GiDYOZmkpvY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Embedded-intelligence/~4/s9Eh670oC9w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://embedded-intelligence.blogspot.com/feeds/8709204199092480906/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8629334689063620082&amp;postID=8709204199092480906" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/8709204199092480906?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/8709204199092480906?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Embedded-intelligence/~3/s9Eh670oC9w/arm-on-qemu.html" title="ARM on QEMU" /><author><name>Nemesis Of The State</name><uri>http://www.blogger.com/profile/08729047479455186451</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="25" src="http://3.bp.blogspot.com/_V6Fx-tfyJms/SNYKC1bHWpI/AAAAAAAAABo/_7qA_h9BszU/S220/ss_kali.bmp" /></author><thr:total>0</thr:total><feedburner:origLink>http://embedded-intelligence.blogspot.com/2009/12/arm-on-qemu.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4GQXs6cSp7ImA9WxNaFEQ.&quot;"><id>tag:blogger.com,1999:blog-8629334689063620082.post-2476826213064723751</id><published>2009-11-29T04:24:00.000-08:00</published><updated>2009-11-29T04:48:40.519-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-29T04:48:40.519-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="kernel headers" /><category scheme="http://www.blogger.com/atom/ns#" term="headers_install_all" /><category scheme="http://www.blogger.com/atom/ns#" term="cross toolchains" /><category scheme="http://www.blogger.com/atom/ns#" term="make headers_install" /><category scheme="http://www.blogger.com/atom/ns#" term="headers_install" /><category scheme="http://www.blogger.com/atom/ns#" term="generating kernel headers" /><title>Cross Toolchains : PART2 (Kernel Headers)</title><content type="html">1. Download the kernel sources from kernel.org&lt;br /&gt;&lt;br /&gt;2. cd to the sources root directory&lt;br /&gt;&lt;br /&gt;3. run the following command to extract the headers for ARM&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-weight: bold;"&gt;make headers_install ARCH=arm INSTALL_HDR_PATH=/usr/include/arm-linux-headers&lt;/pre&gt;Where ARCH specifies the architecture for which the headers are to be generated. INSTALL_HDR_PATH is the path on the local system where the header files will be placed. The default is /usr/include&lt;br /&gt;&lt;br /&gt;To see a list of all supported architectures&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="font-weight: bold;"&gt;ls -d include/asm-* | sed 's/.*-//'&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;make headers_install_all exports headers for all architectures simultaneously. Not very useful for the average embedded programmer.&lt;br /&gt;&lt;br /&gt;#Decribe the API for the user space programs wishing to use kernel services&lt;br /&gt;#Used by system's C library (glibc or uClibc) to define available system calls as well as constants and structures to be used with these system calls.&lt;br /&gt;#Kernel headers are backward compatibl&lt;span style="font-family:monospace;"&gt;e.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;[Sources : 1. Documentation/make/headers_install.txt ]&lt;br /&gt;&lt;pre&gt;&lt;span style="font-size:100%;"&gt;nemesis@nemesis-laptop:~/arm-linux-kernel/linux-2.6.31.6$ sudo make headers_install ARCH=arm INSTALL_HDR_PATH=/usr/include/arm-linux&lt;br /&gt;CHK     include/linux/version.h                                                                                                   &lt;br /&gt;make[1]: `scripts/unifdef' is up to date.                                                                                           &lt;br /&gt;INSTALL include/asm-generic (34 files)                                                                                            &lt;br /&gt;INSTALL include/drm (12 files)                                                                                                    &lt;br /&gt;INSTALL include/linux/byteorder (2 files)                                                                                         &lt;br /&gt;INSTALL include/linux/can (4 files)                                                                                               &lt;br /&gt;INSTALL include/linux/dvb (8 files)                                                                                               &lt;br /&gt;INSTALL include/linux/hdlc (1 file)                                                                                               &lt;br /&gt;INSTALL include/linux/isdn (1 file)                                                                                               &lt;br /&gt;INSTALL include/linux/netfilter (58 files)                                                                                        &lt;br /&gt;INSTALL include/linux/netfilter_arp (2 files)                                                                                     &lt;br /&gt;INSTALL include/linux/netfilter_bridge (16 files)                                                                                 &lt;br /&gt;INSTALL include/linux/netfilter_ipv4 (46 files)                                                                                   &lt;br /&gt;INSTALL include/linux/netfilter_ipv6 (21 files)                                                                                   &lt;br /&gt;INSTALL include/linux/nfsd (6 files)                                                                                              &lt;br /&gt;INSTALL include/linux/raid (2 files)                                                                                              &lt;br /&gt;INSTALL include/linux/spi (1 file)                                                                                                &lt;br /&gt;INSTALL include/linux/sunrpc (1 file)                                                                                             &lt;br /&gt;INSTALL include/linux/tc_act (6 files)                                                                                            &lt;br /&gt;INSTALL include/linux/tc_ematch (4 files)                                                                                         &lt;br /&gt;INSTALL include/linux/usb (8 files)                                                                                               &lt;br /&gt;INSTALL include/linux/wimax (1 file)                                                                                              &lt;br /&gt;INSTALL include/linux (352 files)                                                                                                 &lt;br /&gt;INSTALL include/mtd (5 files)                                                                                                     &lt;br /&gt;INSTALL include/rdma (1 file)                                                                                                     &lt;br /&gt;INSTALL include/scsi (4 files)                                                                                                    &lt;br /&gt;INSTALL include/sound (9 files)                                                                                                   &lt;br /&gt;INSTALL include/video (3 files)                                                                                                   &lt;br /&gt;INSTALL include/xen (1 file)                                                                                                      &lt;br /&gt;INSTALL include (0 file)                                                                                                          &lt;br /&gt;INSTALL include/asm (32 files)&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt; &lt;pre&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8629334689063620082-2476826213064723751?l=embedded-intelligence.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZtbMrO7Mj1hgNH44guxQnkMEotQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZtbMrO7Mj1hgNH44guxQnkMEotQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZtbMrO7Mj1hgNH44guxQnkMEotQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZtbMrO7Mj1hgNH44guxQnkMEotQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Embedded-intelligence/~4/4OpmLvK20DE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://embedded-intelligence.blogspot.com/feeds/2476826213064723751/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8629334689063620082&amp;postID=2476826213064723751" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/2476826213064723751?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/2476826213064723751?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Embedded-intelligence/~3/4OpmLvK20DE/cross-toolchains-part2-kernel-headers.html" title="Cross Toolchains : PART2 (Kernel Headers)" /><author><name>Nemesis Of The State</name><uri>http://www.blogger.com/profile/08729047479455186451</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="25" src="http://3.bp.blogspot.com/_V6Fx-tfyJms/SNYKC1bHWpI/AAAAAAAAABo/_7qA_h9BszU/S220/ss_kali.bmp" /></author><thr:total>0</thr:total><feedburner:origLink>http://embedded-intelligence.blogspot.com/2009/11/cross-toolchains-part2-kernel-headers.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4DQ3Y8eCp7ImA9WxNaFEQ.&quot;"><id>tag:blogger.com,1999:blog-8629334689063620082.post-215003845700473308</id><published>2009-11-29T03:02:00.001-08:00</published><updated>2009-11-29T04:49:32.870-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-29T04:49:32.870-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="addr2line" /><category scheme="http://www.blogger.com/atom/ns#" term="objdump" /><category scheme="http://www.blogger.com/atom/ns#" term="nm" /><category scheme="http://www.blogger.com/atom/ns#" term="binutils" /><category scheme="http://www.blogger.com/atom/ns#" term="cross toolchains" /><category scheme="http://www.blogger.com/atom/ns#" term="strings" /><category scheme="http://www.blogger.com/atom/ns#" term="c library" /><category scheme="http://www.blogger.com/atom/ns#" term="readelf" /><title>Cross Toolchains : PART 1 (Binutils)</title><content type="html">Components of crosstoolchain&lt;br /&gt;===================&lt;br /&gt;&lt;br /&gt;1. Binutils&lt;br /&gt;2. Kernel header&lt;br /&gt;3. C library&lt;br /&gt;4. Compiler [e.g gcc]&lt;br /&gt;&lt;br /&gt;optional : gdb debugger etc&lt;br /&gt;&lt;br /&gt;Binutils&lt;br /&gt;=====&lt;br /&gt;The target architecture needs to have its own set of tools to generate binary files for it. Also it would be nice to have some tools to enable examining these.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ld ---&gt; linker&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;strip --&gt;&lt;/span&gt; to strip the object file of a particular section. e.g strip the comments to reduce the code size.&lt;br /&gt;&lt;pre&gt;      strip [ -F BFDNAME | --target=BFDNAME ]&lt;br /&gt;      [ -I BFDNAME | --input-target=BFDNAME ]&lt;br /&gt;      [ -O BFDNAME | --output-target=BFDNAME ]&lt;br /&gt;      [ -s | --strip-all ] [ -S | -g | --strip-debug ]&lt;br /&gt;      [ -K SYMBOLNAME | --keep-symbol=SYMBOLNAME ]&lt;br /&gt;      [ -N SYMBOLNAME | --strip-symbol=SYMBOLNAME ]&lt;br /&gt;      [ -x | --discard-all ] [ -X | --discard-locals ]&lt;br /&gt;      [ -R SECTIONNAME | --remove-section=SECTIONNAME ]&lt;br /&gt;      [ -o FILE ] [ -p | --preserve-dates ]&lt;br /&gt;      [ -v | --verbose ]  [ -V | --version ]  [ --help ]&lt;br /&gt;      OBJFILE...&lt;br /&gt;&lt;br /&gt;e.g strip --remove section=.comment &lt;obj-file&gt;&lt;br /&gt;&lt;/obj-file&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;as --&gt; assembler&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;objdump&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;objcopy&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;readelf&lt;/span&gt;: very useful tool. I invariably use it with -a switch to retrieve the max info.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;nm&lt;/span&gt; : lists all the symbols in an object file.&lt;br /&gt;&lt;br /&gt;===========&lt;br /&gt;Extract from IBM's website&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;objdump &amp;amp; nm&lt;br /&gt;&lt;/span&gt; &lt;div&gt;&lt;p&gt;The commands &lt;strong&gt;objdump&lt;/strong&gt; and &lt;strong&gt;nm&lt;/strong&gt; both display information about object files. If a crash occurs and a corefile is produced, these commands help you analyze the file.&lt;/p&gt;  &lt;dl&gt;&lt;dt class="dlterm"&gt;objdump&lt;/dt&gt;&lt;dd&gt;Use this command to disassemble shared objects and libraries. After you have discovered which library or object has caused the problem, use &lt;strong&gt;objdump&lt;/strong&gt; to locate the method in which the problem originates. To invoke objdump, type: &lt;samp class="codeph"&gt;objdump  &lt;filename&gt;&lt;/filename&gt;&lt;/samp&gt;&lt;/dd&gt;&lt;dt class="dlterm"&gt;nm&lt;/dt&gt;&lt;dd&gt;This command lists symbol names from object files. These symbol names can be either functions, global variables, or static variables.  For each symbol, the value, symbol type, and symbol name are displayed. Lower case symbol types mean the symbol is local, while upper case means the symbol is global or external. To use this tool, type: &lt;samp class="codeph"&gt;nm   &lt;filename&gt;&lt;/filename&gt;&lt;/samp&gt;&lt;/dd&gt;&lt;/dl&gt; &lt;p&gt;You can see a complete list of options by typing &lt;samp class="codeph"&gt;objdump -H&lt;/samp&gt;. The &lt;strong&gt;-d &lt;/strong&gt;option disassembles contents of executable sections&lt;/p&gt; &lt;p&gt;Run these commands on the same machine as the one that produced the core files to get the most accurate symbolic information available. This output (together with the core file, if small enough) is used by the IBM&lt;sup&gt;®&lt;/sup&gt; support team for Java™ to diagnose a problem.&lt;/p&gt; &lt;/div&gt;=================================&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;addr2line&lt;/span&gt; : very important for debugging. E.g lets say you get a core dump with a backtrace. You can use the backtrace info to go to the code directly&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;void test_funk()&lt;br /&gt;{&lt;br /&gt;    printf("#NEMESIS: testing funky func \n");&lt;br /&gt;    printf("#NEMESIS: address of test_funk [%p]", &amp;amp;test_funk);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Output: in the output the addess printed is 0x845c. Pass this as an input to the addr2line.]&lt;br /&gt;&lt;br /&gt;nemesis@nemesis-laptop:~/test_code$ arm-none-linux-gnueabi-addr2line 0x845c&lt;br /&gt;/home/adikumar/test_code/test_3.c:5 &lt;span style="font-weight: bold;"&gt; ===&gt; Lo and behold.You have the line in the code.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;strings:&lt;/span&gt; Lists all string in an object file. use it with grep to find a particular string&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;nemesis@nemesis-laptop:~/codesourcery/arm-2009q3/bin$ arm-none-linux-gnueabi-strings test2&lt;br /&gt;/lib/ld-linux.so.3&lt;br /&gt;libgcc_s.so.1&lt;br /&gt;__aeabi_unwind_cpp_pr0&lt;br /&gt;__gmon_start__&lt;br /&gt;_Jv_RegisterClasses&lt;br /&gt;__aeabi_unwind_cpp_pr1&lt;br /&gt;libc.so.6&lt;br /&gt;abort&lt;br /&gt;printf&lt;br /&gt;__libc_start_main&lt;br /&gt;GCC_3.5&lt;br /&gt;GLIBC_2.4&lt;br /&gt;###!Nemesis: LittleEndian   =========&gt; my prints&lt;br /&gt;###!Nemesis: BigEndian      =========&gt; my prints&lt;br /&gt;0x%x&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8629334689063620082-215003845700473308?l=embedded-intelligence.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/grMvtbIOsD95WeGWbBNX4QZwqEI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/grMvtbIOsD95WeGWbBNX4QZwqEI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/grMvtbIOsD95WeGWbBNX4QZwqEI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/grMvtbIOsD95WeGWbBNX4QZwqEI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Embedded-intelligence/~4/_zc2ZpRFjEs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://embedded-intelligence.blogspot.com/feeds/215003845700473308/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8629334689063620082&amp;postID=215003845700473308" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/215003845700473308?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/215003845700473308?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Embedded-intelligence/~3/_zc2ZpRFjEs/cross-toolchains.html" title="Cross Toolchains : PART 1 (Binutils)" /><author><name>Nemesis Of The State</name><uri>http://www.blogger.com/profile/08729047479455186451</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="25" src="http://3.bp.blogspot.com/_V6Fx-tfyJms/SNYKC1bHWpI/AAAAAAAAABo/_7qA_h9BszU/S220/ss_kali.bmp" /></author><thr:total>0</thr:total><feedburner:origLink>http://embedded-intelligence.blogspot.com/2009/11/cross-toolchains.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMFRX05eCp7ImA9WxNaFEw.&quot;"><id>tag:blogger.com,1999:blog-8629334689063620082.post-7412385844809378395</id><published>2009-11-25T03:50:00.000-08:00</published><updated>2009-11-28T06:26:54.320-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-28T06:26:54.320-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="big endian" /><category scheme="http://www.blogger.com/atom/ns#" term="endianess" /><category scheme="http://www.blogger.com/atom/ns#" term="little endian" /><category scheme="http://www.blogger.com/atom/ns#" term="code to determine endianness" /><title>Whats your Endian-ness ?</title><content type="html">&lt;div&gt;   int i= 0x1;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;   *((char*)&amp;amp;i) ? printf("###!Nemesis: LittleEndian\n"):printf("###!Nemesis: BigEndian\n");&lt;/div&gt;&lt;div&gt;   printf("0x%x \n", *((char*)&amp;amp;i));&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8629334689063620082-7412385844809378395?l=embedded-intelligence.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/tWuHNFlpob3Mmk_zZD66JTDlnpg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tWuHNFlpob3Mmk_zZD66JTDlnpg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/tWuHNFlpob3Mmk_zZD66JTDlnpg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tWuHNFlpob3Mmk_zZD66JTDlnpg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Embedded-intelligence/~4/0TCCPrcLnJk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://embedded-intelligence.blogspot.com/feeds/7412385844809378395/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8629334689063620082&amp;postID=7412385844809378395" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/7412385844809378395?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/7412385844809378395?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Embedded-intelligence/~3/0TCCPrcLnJk/whats-your-endian-ness.html" title="Whats your Endian-ness ?" /><author><name>Nemesis Of The State</name><uri>http://www.blogger.com/profile/08729047479455186451</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="25" src="http://3.bp.blogspot.com/_V6Fx-tfyJms/SNYKC1bHWpI/AAAAAAAAABo/_7qA_h9BszU/S220/ss_kali.bmp" /></author><thr:total>0</thr:total><feedburner:origLink>http://embedded-intelligence.blogspot.com/2009/11/whats-your-endian-ness.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08MRns8eip7ImA9WxNaFU8.&quot;"><id>tag:blogger.com,1999:blog-8629334689063620082.post-1970553897708211100</id><published>2009-11-18T06:43:00.000-08:00</published><updated>2009-11-29T13:24:47.572-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-29T13:24:47.572-08:00</app:edited><title>Forthcoming Embedded Articles</title><content type="html">1. Building cross compiled linux kernel [With debug support]. Explain various configuration options.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2. Building a customized root filesystem&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3. initial Ram disk&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;4. Uboot Bootloader: Internals, porting &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;5. Linux kernel start code walk through [ARM perspective]&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;6. Busybox&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;7. Using emulators [Qemu]&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;8.  Linux device driver Serial : ARM Primecell UART&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;9. Linux Network driver&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;10. Linux Serial Driver&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;11. Gnu Tool chain [ gdb, gcc etc ]. binutils Making your own toolchain&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;12. ucLinux , ucLibc&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;13. NFS mounting &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;14. Remote debugging with gdbserver&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;15. Integrating Eclipse into your embedded development system&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;16. Misc tools : valgrind, profiling tools etc&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;17. kernel boot parameters. Explain nfs boot [ ip assigned by DHCP]&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;18.  Various kernel image formats...zImage, uImage, vmlinux etc [ explain the linking and image components]&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;19.  uClibC vs glibc&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;20. different filesystems (esp squashfs )&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;21. scratchbox, Buildroot&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8629334689063620082-1970553897708211100?l=embedded-intelligence.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/iy4ZdgL6DWYw5rBSpBsWKrGM6Oo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iy4ZdgL6DWYw5rBSpBsWKrGM6Oo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/iy4ZdgL6DWYw5rBSpBsWKrGM6Oo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iy4ZdgL6DWYw5rBSpBsWKrGM6Oo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Embedded-intelligence/~4/lZTA64s3uXM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://embedded-intelligence.blogspot.com/feeds/1970553897708211100/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8629334689063620082&amp;postID=1970553897708211100" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/1970553897708211100?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/1970553897708211100?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Embedded-intelligence/~3/lZTA64s3uXM/forthcoming-embedded-articles.html" title="Forthcoming Embedded Articles" /><author><name>Nemesis Of The State</name><uri>http://www.blogger.com/profile/08729047479455186451</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="25" src="http://3.bp.blogspot.com/_V6Fx-tfyJms/SNYKC1bHWpI/AAAAAAAAABo/_7qA_h9BszU/S220/ss_kali.bmp" /></author><thr:total>0</thr:total><feedburner:origLink>http://embedded-intelligence.blogspot.com/2009/11/forthcoming-embedded-articles.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQCSXk-fSp7ImA9WxJUEEk.&quot;"><id>tag:blogger.com,1999:blog-8629334689063620082.post-838474677722906290</id><published>2009-07-08T02:29:00.000-07:00</published><updated>2009-07-08T02:46:08.755-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-08T02:46:08.755-07:00</app:edited><title>Difference between "su" and "su -"</title><content type="html">A lot of people don't know the difference [and there is a day light of difference :) ]&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;==================&lt;/div&gt;&lt;div&gt;su &lt;/div&gt;&lt;div&gt;==================&lt;/div&gt;&lt;div&gt;1. ENVIRONMENT : The environment is the same as that of the user's from which you entered root. In the following example, the environment would be the same as that of user nemesis.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;e.g &lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS'; color: rgb(0, 102, 0); font-size: 14px; "&gt;nemesis@tantra:~/device-drivers$su&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"    style="font-family:'Trebuchet MS';font-size:130%;color:#006600;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:'Trebuchet MS';font-size:130%;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px;"&gt;================================&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:'Trebuchet MS';font-size:130%;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px;"&gt;su - &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:'Trebuchet MS';font-size:130%;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px;"&gt;================================&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:'Trebuchet MS';font-size:130%;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:'Trebuchet MS';font-size:130%;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px;"&gt;1. shell reads a relevant startup files and simulates a login&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:'Trebuchet MS';font-size:130%;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:'Trebuchet MS';font-size:130%;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px;"&gt;2. ENVIRONMENT: The enviroment is that of the superuser/root and NOT that of the account from you you invoked "su".&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:'Trebuchet MS';font-size:130%;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:'Trebuchet MS';font-size:130%;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px;"&gt;For more detailed information, please refer to the man pages.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8629334689063620082-838474677722906290?l=embedded-intelligence.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/F0V1RdLyqlO0H87-JqBtEKSd1J8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/F0V1RdLyqlO0H87-JqBtEKSd1J8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/F0V1RdLyqlO0H87-JqBtEKSd1J8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/F0V1RdLyqlO0H87-JqBtEKSd1J8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Embedded-intelligence/~4/mki37twD28Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://embedded-intelligence.blogspot.com/feeds/838474677722906290/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8629334689063620082&amp;postID=838474677722906290" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/838474677722906290?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/838474677722906290?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Embedded-intelligence/~3/mki37twD28Q/difference-between-su-and-su.html" title="Difference between &quot;su&quot; and &quot;su -&quot;" /><author><name>Nemesis Of The State</name><uri>http://www.blogger.com/profile/08729047479455186451</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="25" src="http://3.bp.blogspot.com/_V6Fx-tfyJms/SNYKC1bHWpI/AAAAAAAAABo/_7qA_h9BszU/S220/ss_kali.bmp" /></author><thr:total>0</thr:total><feedburner:origLink>http://embedded-intelligence.blogspot.com/2009/07/difference-between-su-and-su.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8ARH45eyp7ImA9WxJVGEo.&quot;"><id>tag:blogger.com,1999:blog-8629334689063620082.post-5981633482364077803</id><published>2009-07-06T01:55:00.001-07:00</published><updated>2009-07-06T02:00:45.023-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-06T02:00:45.023-07:00</app:edited><title>Strings: Single Quote Vs Double Quotes</title><content type="html">In UNIX Shell &lt;div&gt;============&lt;/div&gt;&lt;div&gt;Double Quotes : In (Most ) UNIX shells and other scripting languages like perl, the interpreter would parse through the string inorder to perform substitutions for any variables in the string.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Single Quotes: Interpreter leaves the string alone. It is treated as a string literal.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In C&lt;/div&gt;&lt;div&gt;===========&lt;/div&gt;&lt;div&gt;Double Quotes: For strings&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Single Quotes : For single character literals.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;e.g &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;char c[];&lt;/div&gt;&lt;div&gt;c = 'c';            ==&gt; SINGLE Quotes&lt;/div&gt;&lt;div&gt;c = "char";    ==&gt; DOUBLE quotes&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8629334689063620082-5981633482364077803?l=embedded-intelligence.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Qg4CQB3elRoXAcoUZjhQ-59MgBw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Qg4CQB3elRoXAcoUZjhQ-59MgBw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Qg4CQB3elRoXAcoUZjhQ-59MgBw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Qg4CQB3elRoXAcoUZjhQ-59MgBw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Embedded-intelligence/~4/dR0TYzlMJ_c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://embedded-intelligence.blogspot.com/feeds/5981633482364077803/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8629334689063620082&amp;postID=5981633482364077803" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/5981633482364077803?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/5981633482364077803?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Embedded-intelligence/~3/dR0TYzlMJ_c/strings-single-quote-vs-double-quotes.html" title="Strings: Single Quote Vs Double Quotes" /><author><name>Nemesis Of The State</name><uri>http://www.blogger.com/profile/08729047479455186451</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="25" src="http://3.bp.blogspot.com/_V6Fx-tfyJms/SNYKC1bHWpI/AAAAAAAAABo/_7qA_h9BszU/S220/ss_kali.bmp" /></author><thr:total>0</thr:total><feedburner:origLink>http://embedded-intelligence.blogspot.com/2009/07/strings-single-quote-vs-double-quotes.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4CSXcyfip7ImA9WxVSGUw.&quot;"><id>tag:blogger.com,1999:blog-8629334689063620082.post-5847059768365292436</id><published>2009-01-13T01:57:00.000-08:00</published><updated>2009-01-13T23:09:28.996-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-13T23:09:28.996-08:00</app:edited><title>Minimal GIT guide</title><content type="html">1. Create a new branch on the remote git repository&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 204, 0);"&gt;git push origin origin:refs/heads/&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 204, 0);"&gt;&lt;new-branch-name&gt;&lt;/new-branch-name&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 204, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 204, 0);"&gt;e.g git push origin origin:/refs/heads/nemesis-debug&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;creates a branch called nemesis-debug on the remote repository.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Confirm this by typing &lt;span class="Apple-style-span" style="color: rgb(51, 204, 0);"&gt;git branch -r&lt;/span&gt;. Your new respository should appear there.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2. create a local branch to track the newly created remote branch.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 204, 0);"&gt;git checkout --track -b &lt;local-branch&gt; &lt;remote-branch&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 204, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 204, 0);"&gt;e.g git checkout --track -b nemesis-debug origin/nemesis-debug&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3. make all necessary changes.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;4. commit your changes&lt;/div&gt;&lt;div&gt;a.add files/directories you want to commit&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 204, 0);"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 204, 0);"&gt;git add &lt;/span&gt;&lt;file-name&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 204, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/file-name&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 204, 0);"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 204, 0);"&gt;git add .   # adds all the files in the directory recursively&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;b. commit&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 204, 0);"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 204, 0);"&gt;git commit -m "commit-message"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;c. push all your changes to the repository&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 204, 0);"&gt;git push origin &lt;branch-name&gt;&lt;/branch-name&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 204, 0);"&gt;&lt;branch&gt;&lt;/branch&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 204, 0);"&gt;e.g git push origin nemesis-debug&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;5. In case you screwed up and want to delete the remote branch &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 204, 0);"&gt;git push origin :heads/&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 204, 0);"&gt;&lt;branch-name&gt;&lt;/branch-name&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 204, 0);"&gt;e.g git push origin :heads/nemesis-debug&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8629334689063620082-5847059768365292436?l=embedded-intelligence.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bvdoqP-bxpTvxOObKLTNGcBa8uk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bvdoqP-bxpTvxOObKLTNGcBa8uk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bvdoqP-bxpTvxOObKLTNGcBa8uk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bvdoqP-bxpTvxOObKLTNGcBa8uk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Embedded-intelligence/~4/cvTLSIwFYt4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://embedded-intelligence.blogspot.com/feeds/5847059768365292436/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8629334689063620082&amp;postID=5847059768365292436" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/5847059768365292436?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/5847059768365292436?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Embedded-intelligence/~3/cvTLSIwFYt4/minimal-git-guide.html" title="Minimal GIT guide" /><author><name>Nemesis Of The State</name><uri>http://www.blogger.com/profile/08729047479455186451</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="25" src="http://3.bp.blogspot.com/_V6Fx-tfyJms/SNYKC1bHWpI/AAAAAAAAABo/_7qA_h9BszU/S220/ss_kali.bmp" /></author><thr:total>0</thr:total><feedburner:origLink>http://embedded-intelligence.blogspot.com/2009/01/minimal-git-guide.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQHR3w5cSp7ImA9WxVSEk4.&quot;"><id>tag:blogger.com,1999:blog-8629334689063620082.post-1714678362653172573</id><published>2009-01-06T00:52:00.000-08:00</published><updated>2009-01-06T00:58:56.229-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-06T00:58:56.229-08:00</app:edited><title>Memory Optimizations: Kernel Programming</title><content type="html">&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;UNLIKE User-space code/data, kernel code/data reside PERMANENTLY in memory. They are NOT swapped Out.&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&gt;&gt;&gt;&lt;/span&gt; &lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;module_ini&lt;/span&gt;&lt;span class="Apple-style-span" style=""&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;t&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt; :&lt;/span&gt; &lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;RUN Time Optimization&lt;/span&gt;. Executed when the associated module is loaded. If the module is statically included in the kernel, the kernel can free the module_init routine right at the boot time, after it runs.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&gt;&gt;&gt; &lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;module_ex&lt;/span&gt;&lt;span class="Apple-style-span" style=""&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;t:&lt;/span&gt; &lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;LINK Time Optimization&lt;/span&gt;. It is never executed if the modules are statically included in the kernel. In such cases, it is not needed to include module_exit routines into the kernel image and are discarded at Link Time.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8629334689063620082-1714678362653172573?l=embedded-intelligence.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Y5KQd5y3mMOt_Tcfm6LF3whnZjo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Y5KQd5y3mMOt_Tcfm6LF3whnZjo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Y5KQd5y3mMOt_Tcfm6LF3whnZjo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Y5KQd5y3mMOt_Tcfm6LF3whnZjo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Embedded-intelligence/~4/nViKpEVJQUs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://embedded-intelligence.blogspot.com/feeds/1714678362653172573/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8629334689063620082&amp;postID=1714678362653172573" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/1714678362653172573?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8629334689063620082/posts/default/1714678362653172573?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Embedded-intelligence/~3/nViKpEVJQUs/memory-optimizations-kernel-programming.html" title="Memory Optimizations: Kernel Programming" /><author><name>Nemesis Of The State</name><uri>http://www.blogger.com/profile/08729047479455186451</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="25" src="http://3.bp.blogspot.com/_V6Fx-tfyJms/SNYKC1bHWpI/AAAAAAAAABo/_7qA_h9BszU/S220/ss_kali.bmp" /></author><thr:total>0</thr:total><feedburner:origLink>http://embedded-intelligence.blogspot.com/2009/01/memory-optimizations-kernel-programming.html</feedburner:origLink></entry></feed>

