<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-19148364</id><updated>2024-08-29T18:55:25.309+08:00</updated><title type='text'>Korn</title><subtitle type='html'>take it easy</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://22lu.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default?alt=atom'/><link rel='alternate' type='text/html' href='http://22lu.blogspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default?alt=atom&amp;start-index=26&amp;max-results=25'/><author><name>Korn</name><uri>http://www.blogger.com/profile/09578936402591597652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>115</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-19148364.post-5273630537639841754</id><published>2011-03-20T21:23:00.001+08:00</published><updated>2011-03-20T21:24:31.098+08:00</updated><title type='text'>the social network</title><content type='html'>just saw the movie this afternoon, really good.&lt;br /&gt;Hard work plus good idea, make the money!</content><link rel='replies' type='application/atom+xml' href='http://22lu.blogspot.com/feeds/5273630537639841754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19148364/5273630537639841754' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/5273630537639841754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/5273630537639841754'/><link rel='alternate' type='text/html' href='http://22lu.blogspot.com/2011/03/social-network.html' title='the social network'/><author><name>Korn</name><uri>http://www.blogger.com/profile/09578936402591597652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19148364.post-5684417948554424073</id><published>2011-03-15T22:18:00.001+08:00</published><updated>2011-03-15T22:19:40.309+08:00</updated><title type='text'>A moment to remember</title><content type='html'>Just got a chance to test a free service from tenacy, which is really good. With that, I&#39;m back here, effectively breaks the wall, considering buying this service now.</content><link rel='replies' type='application/atom+xml' href='http://22lu.blogspot.com/feeds/5684417948554424073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19148364/5684417948554424073' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/5684417948554424073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/5684417948554424073'/><link rel='alternate' type='text/html' href='http://22lu.blogspot.com/2011/03/moment-to-remember.html' title='A moment to remember'/><author><name>Korn</name><uri>http://www.blogger.com/profile/09578936402591597652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19148364.post-5925422536749733355</id><published>2010-07-21T17:13:00.001+08:00</published><updated>2010-07-21T17:13:33.072+08:00</updated><title type='text'>I feel so sad right now and wanna die</title><content type='html'>I feel so sad right now and wanna die&lt;br&gt;</content><link rel='replies' type='application/atom+xml' href='http://22lu.blogspot.com/feeds/5925422536749733355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19148364/5925422536749733355' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/5925422536749733355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/5925422536749733355'/><link rel='alternate' type='text/html' href='http://22lu.blogspot.com/2010/07/i-feel-so-sad-right-now-and-wanna-die.html' title='I feel so sad right now and wanna die'/><author><name>Korn</name><uri>http://www.blogger.com/profile/09578936402591597652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19148364.post-8482542143822984104</id><published>2009-12-29T22:06:00.001+08:00</published><updated>2009-12-29T22:06:16.811+08:00</updated><title type='text'>uploaded from google doc!</title><content type='html'>uploaded from google doc!&lt;br&gt;</content><link rel='replies' type='application/atom+xml' href='http://22lu.blogspot.com/feeds/8482542143822984104/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19148364/8482542143822984104' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/8482542143822984104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/8482542143822984104'/><link rel='alternate' type='text/html' href='http://22lu.blogspot.com/2009/12/uploaded-from-google-doc.html' title='uploaded from google doc!'/><author><name>Korn</name><uri>http://www.blogger.com/profile/09578936402591597652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19148364.post-5843671604681119366</id><published>2009-05-13T16:16:00.002+08:00</published><updated>2009-05-13T16:17:25.298+08:00</updated><title type='text'>Windows more user friendly than linux</title><content type='html'>And I feel much more comfortable while using windows now...&lt;br /&gt;Pidgin crashed a lot and I&#39;ve no idea</content><link rel='replies' type='application/atom+xml' href='http://22lu.blogspot.com/feeds/5843671604681119366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19148364/5843671604681119366' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/5843671604681119366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/5843671604681119366'/><link rel='alternate' type='text/html' href='http://22lu.blogspot.com/2009/05/windows-more-user-friendly-than-linux.html' title='Windows more user friendly than linux'/><author><name>Korn</name><uri>http://www.blogger.com/profile/09578936402591597652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19148364.post-2900278268849849896</id><published>2009-03-18T15:23:00.003+08:00</published><updated>2009-03-18T15:28:30.094+08:00</updated><title type='text'>Get file name from file descriptor under Linux</title><content type='html'>/proc/pid/fd is a directory that has symbol link files named by its fd number pointing to the real name of the opened file.&lt;br /&gt;Say a process, whose pid is 2771, opend a file /lib/libc-2.9.so and its fd is 3, then the symbol link file /proc/2771/fd/3 will point to /lib/libc-2.9.so.&lt;br /&gt;readlink could get the pointed file path.</content><link rel='replies' type='application/atom+xml' href='http://22lu.blogspot.com/feeds/2900278268849849896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19148364/2900278268849849896' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/2900278268849849896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/2900278268849849896'/><link rel='alternate' type='text/html' href='http://22lu.blogspot.com/2009/03/get-name-from-file-descriptor-under.html' title='Get file name from file descriptor under Linux'/><author><name>Korn</name><uri>http://www.blogger.com/profile/09578936402591597652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19148364.post-456987072883050728</id><published>2009-02-05T14:15:00.001+08:00</published><updated>2009-02-05T14:16:51.250+08:00</updated><title type='text'>memory</title><content type='html'>All my friends left via as of today, I feel sad.&lt;br /&gt;Best wishes to them, and good luck.</content><link rel='replies' type='application/atom+xml' href='http://22lu.blogspot.com/feeds/456987072883050728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19148364/456987072883050728' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/456987072883050728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/456987072883050728'/><link rel='alternate' type='text/html' href='http://22lu.blogspot.com/2009/02/memory.html' title='memory'/><author><name>Korn</name><uri>http://www.blogger.com/profile/09578936402591597652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19148364.post-2669527990893886612</id><published>2008-10-24T21:12:00.002+08:00</published><updated>2008-12-02T12:17:02.350+08:00</updated><title type='text'>personal fedora 9 problem list</title><content type='html'>1 scim lock up keyboard input&lt;br /&gt;2 one of the fedora box cannot change mouse pointer on the fly&lt;br /&gt;&lt;br /&gt;solutions:&lt;br /&gt;1 do not use scim&lt;br /&gt;2 logout and then login&lt;br /&gt;&lt;br /&gt;fuck?&lt;br /&gt;&lt;br /&gt;Found a solution, install scim-bridge-gtk</content><link rel='replies' type='application/atom+xml' href='http://22lu.blogspot.com/feeds/2669527990893886612/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19148364/2669527990893886612' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/2669527990893886612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/2669527990893886612'/><link rel='alternate' type='text/html' href='http://22lu.blogspot.com/2008/10/personal-fedora-9-problem-list.html' title='personal fedora 9 problem list'/><author><name>Korn</name><uri>http://www.blogger.com/profile/09578936402591597652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19148364.post-7846958956823489562</id><published>2008-10-13T21:14:00.001+08:00</published><updated>2008-10-13T21:15:49.225+08:00</updated><title type='text'>birth</title><content type='html'>cui had just given birth to her boy this afternoon, congratulations to her!&lt;br /&gt;And ours are also coming near, we are waiting for you baby.</content><link rel='replies' type='application/atom+xml' href='http://22lu.blogspot.com/feeds/7846958956823489562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19148364/7846958956823489562' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/7846958956823489562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/7846958956823489562'/><link rel='alternate' type='text/html' href='http://22lu.blogspot.com/2008/10/birth.html' title='birth'/><author><name>Korn</name><uri>http://www.blogger.com/profile/09578936402591597652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19148364.post-3630837033790421719</id><published>2008-09-08T11:44:00.002+08:00</published><updated>2008-09-08T11:50:58.156+08:00</updated><title type='text'>function register usage</title><content type='html'>I&#39;m writing a funtion totally in asm, and found that the calling function assume some register will not be clobbered by called function. I&#39;m puzzled by this behaviour and a few times&#39; google revealed that the architecture&#39;s ABI defined this behaviour.&lt;br /&gt;extract from abi386 doc:&lt;br /&gt;Registers%ebp, %ebx, %edi, %esi, and %esp belong to the calling function. In other words, a called function must preserve these registers values for its caller. Remaining registers belong to the called function. If a calling function wants to preserve such a register value across a function call, it must save the value in its local stack frame.</content><link rel='replies' type='application/atom+xml' href='http://22lu.blogspot.com/feeds/3630837033790421719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19148364/3630837033790421719' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/3630837033790421719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/3630837033790421719'/><link rel='alternate' type='text/html' href='http://22lu.blogspot.com/2008/09/function-register-usage.html' title='function register usage'/><author><name>Korn</name><uri>http://www.blogger.com/profile/09578936402591597652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19148364.post-8809846451439145850</id><published>2008-07-31T11:32:00.002+08:00</published><updated>2008-07-31T11:38:10.456+08:00</updated><title type='text'>tickless system</title><content type='html'>I&#39;ve been experiencing bad cpu performance problem with centos being the guest os using virtualbox, when the guest is up, host cpu runs at 100% even the guest os is idle. It turned out to be timer&#39;s issue. 2.6 kernel uses 1000HZ default that caused this problem(guest cannot handle so much interrupts?). Either lower the frequency to 100HZ or enable tickless system(dynamic ticks) in kernel will solve this problem.&lt;br /&gt;Dunno why virtual pc is not subjected to this problem.</content><link rel='replies' type='application/atom+xml' href='http://22lu.blogspot.com/feeds/8809846451439145850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19148364/8809846451439145850' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/8809846451439145850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/8809846451439145850'/><link rel='alternate' type='text/html' href='http://22lu.blogspot.com/2008/07/tickless-system.html' title='tickless system'/><author><name>Korn</name><uri>http://www.blogger.com/profile/09578936402591597652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19148364.post-2250585366490670938</id><published>2008-07-29T14:56:00.001+08:00</published><updated>2008-07-29T14:58:29.334+08:00</updated><title type='text'>pointer subtraction</title><content type='html'>you cannot add two pointers, and if you subtract pointers the result is the number of elements between the two pointers.&lt;br /&gt;&lt;br /&gt;I don&#39;t know the pointer subtraction behavior till today.</content><link rel='replies' type='application/atom+xml' href='http://22lu.blogspot.com/feeds/2250585366490670938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19148364/2250585366490670938' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/2250585366490670938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/2250585366490670938'/><link rel='alternate' type='text/html' href='http://22lu.blogspot.com/2008/07/pointer-subtraction.html' title='pointer subtraction'/><author><name>Korn</name><uri>http://www.blogger.com/profile/09578936402591597652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19148364.post-465047828479389503</id><published>2008-07-04T09:45:00.004+08:00</published><updated>2008-07-16T14:53:37.464+08:00</updated><title type='text'>my winload</title><content type='html'>Well, although the name is not very good, but it now finally could kind of work. I&#39;ve successfully booted linux and reactos with grub legacy and freeldr, problem existed when booting freebsd with its boot loader, I&#39;ll take time to check it.&lt;br /&gt;Todo:&lt;br /&gt;1 speed up winload, now it is a little slow. &lt;br /&gt;2 try to boot windows&lt;br /&gt;&lt;br /&gt;FreeBSD&#39;s boot loader utilizes virtual 8086 mode and in that mode lgdt is not usable &#39;cause virtual 8086 mode task runs ar CPL 3 but lgdt needs CPL 0. So winload should not be able to service freebsd&#39;s bootloader.</content><link rel='replies' type='application/atom+xml' href='http://22lu.blogspot.com/feeds/465047828479389503/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19148364/465047828479389503' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/465047828479389503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/465047828479389503'/><link rel='alternate' type='text/html' href='http://22lu.blogspot.com/2008/07/my-winload.html' title='my winload'/><author><name>Korn</name><uri>http://www.blogger.com/profile/09578936402591597652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19148364.post-7309945052433347585</id><published>2008-06-29T11:00:00.001+08:00</published><updated>2008-06-29T11:02:00.852+08:00</updated><title type='text'>notes on 8259 and APIC</title><content type='html'>In systems containing an 8259 PIC, the 8259 may physically be connected to the LAPIC in the system&#39;s bootstrap processor (BSP), or to one of the system&#39;s I/O APICs, or both. Logically, however, the 8259 is only connected once at any given time.</content><link rel='replies' type='application/atom+xml' href='http://22lu.blogspot.com/feeds/7309945052433347585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19148364/7309945052433347585' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/7309945052433347585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/7309945052433347585'/><link rel='alternate' type='text/html' href='http://22lu.blogspot.com/2008/06/notes-on-8259-and-apic.html' title='notes on 8259 and APIC'/><author><name>Korn</name><uri>http://www.blogger.com/profile/09578936402591597652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19148364.post-8525601150456172473</id><published>2008-04-14T12:00:00.000+08:00</published><updated>2008-04-14T12:12:05.361+08:00</updated><title type='text'>Where to find udivdi3 and umoddi3 in gcc?</title><content type='html'>These are functions calls that the compiler generates to do 64bit &lt;br /&gt;arithmetic operations (because they are not atomic instructions on a &lt;br /&gt;32bit processor). The functions are provided by libgcc.a. You must &lt;br /&gt;explicitly link this library if you have used the -nostdlibs option. You &lt;br /&gt;do this with the linker option -lgcc.&lt;br /&gt;&lt;br /&gt;Note that header files are not generally where functions &#39;live&#39; they &lt;br /&gt;usually merely declare functions. You need the declarations so the &lt;br /&gt;compiler &#39;knows&#39; hot to generate calls to them (and so it can check your &lt;br /&gt;calls are valid). The functions you are having trouble with are &lt;br /&gt;&#39;internal&#39; compiler helper functions, the code generator creates the &lt;br /&gt;calls to them, for code like:&lt;br /&gt;&lt;br /&gt;long long x = 10 ;&lt;br /&gt;long long y = 3 ;&lt;br /&gt;long long z = x / 3 ; // generates call to __udivdi3&lt;br /&gt;&lt;br /&gt;Conceptually, no function is called, so no header is provided for &lt;br /&gt;__udivdi3 etc. - you would not call them explicitly in your code.&lt;br /&gt;&lt;br /&gt;Clifford</content><link rel='replies' type='application/atom+xml' href='http://22lu.blogspot.com/feeds/8525601150456172473/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19148364/8525601150456172473' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/8525601150456172473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/8525601150456172473'/><link rel='alternate' type='text/html' href='http://22lu.blogspot.com/2008/04/where-to-find-udivdi3-and-umoddi3-in.html' title='Where to find udivdi3 and umoddi3 in gcc?'/><author><name>Korn</name><uri>http://www.blogger.com/profile/09578936402591597652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19148364.post-2802457293726659170</id><published>2008-04-09T10:34:00.002+08:00</published><updated>2008-04-09T10:39:35.485+08:00</updated><title type='text'>live examine kernel data</title><content type='html'>$ cd src/linux&lt;br /&gt;$ su&lt;br /&gt;# gdb vmlinux /proc/kcore&lt;br /&gt;there you go.&lt;br /&gt;&lt;br /&gt;I&#39;ve been ignorant of this fact for years, this is really good to check system data and structures.</content><link rel='replies' type='application/atom+xml' href='http://22lu.blogspot.com/feeds/2802457293726659170/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19148364/2802457293726659170' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/2802457293726659170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/2802457293726659170'/><link rel='alternate' type='text/html' href='http://22lu.blogspot.com/2008/04/live-examine-kernel-data.html' title='live examine kernel data'/><author><name>Korn</name><uri>http://www.blogger.com/profile/09578936402591597652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19148364.post-1889718413819969130</id><published>2008-04-07T17:34:00.003+08:00</published><updated>2008-04-07T21:54:33.125+08:00</updated><title type='text'>setup_memory</title><content type='html'>I&#39;ll start from start_kernel, in start_kernel, setup_arch is called for architecture dependent init. in this function, setup_memory is called to init boot memory allocator. the job of setup_memory is to find min_low_pfn(the usable minimal page frame number, that&#39;s PFN_UP(init_pg_tables_end)), max_pfn(the available maximum page frame number) and max_low_pfn(the available maximum page frame number in low memory, that&#39;s under 896MB). then, setup_bootmem_allocator is called.&lt;br /&gt;this function deals with low memory only, it first find out how many bytes needed to map all the low mamory pages, by mapsize = ((max_low_pfn - min_low_pfn) + 7) / 8, and sets the area from contig_page_data-&gt;bdata-&gt;node_bootmem_map to +mapsize all 0xff. every bits of node_bootmem_map represents if this corresponding page is reserved, so set them to all 1s first means all low memory is reserved. then register_bootmem_low_pages will clear the corresponding bits if ram is available in that page. after this, linux will reserve various range, like bootmem bitmap(from _text to min_low_pfn + bootmap_size), zero page, crashkernel, acpi, etc. till now, setup_memory&#39;s job is done.&lt;br /&gt;&lt;br /&gt;more detail:&lt;br /&gt;bootmap_size = init_bootmem(min_low_pfn, max_low_pfn);&lt;br /&gt;where bootmap_size is calculated as stated in the last paragraph, init_bootmem calls init_bootmem_core(contig_page_data, min_low_pfn, 0, max_low_pfn); and in this function, boot_mem_data is initialized, its node_bootmem_map is set to min_low_pfn&#39;s virtual address, node_boot_start is 0 for one node system, node_low_pfn is set to max_low_pfn, finally, memset(bdata-&gt;node_bootmem_map, 0xff, mapsize);</content><link rel='replies' type='application/atom+xml' href='http://22lu.blogspot.com/feeds/1889718413819969130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19148364/1889718413819969130' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/1889718413819969130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/1889718413819969130'/><link rel='alternate' type='text/html' href='http://22lu.blogspot.com/2008/04/linux-memory-init.html' title='setup_memory'/><author><name>Korn</name><uri>http://www.blogger.com/profile/09578936402591597652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19148364.post-7061912703173671186</id><published>2008-04-07T14:42:00.003+08:00</published><updated>2008-04-07T15:35:07.436+08:00</updated><title type='text'>linux kernel data structures</title><content type='html'>The page_address_map structure&#39;s main purpose is to maintain the association with a page and its virtual address. This would be wasteful if the page had a linear association with its virtual address. This becomes necessary only if the addressing is hashed:&lt;br /&gt;mm/highmem.c  &lt;br /&gt;490 struct page_address_map {&lt;br /&gt;491   struct page *page;&lt;br /&gt;492   void *virtual;&lt;br /&gt;493   struct list_head list;&lt;br /&gt;494 };&lt;br /&gt;As you can see, the object keeps a pointer to the page structure that&#39;s associated with this page, a pointer to the virtual address, and a list_head struct to maintain its position in the doubly linked list of the page address list(page_address_pool) it is in. note: these two variables are only visible when the high mem is defined, that is, support for more than 896MB physical memory is defined.</content><link rel='replies' type='application/atom+xml' href='http://22lu.blogspot.com/feeds/7061912703173671186/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19148364/7061912703173671186' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/7061912703173671186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/7061912703173671186'/><link rel='alternate' type='text/html' href='http://22lu.blogspot.com/2008/04/linux-kernel-data-structures.html' title='linux kernel data structures'/><author><name>Korn</name><uri>http://www.blogger.com/profile/09578936402591597652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19148364.post-5899095174184508979</id><published>2008-04-07T09:53:00.000+08:00</published><updated>2008-04-07T09:55:16.660+08:00</updated><title type='text'>big real mode</title><content type='html'>For efficiency reasons, the 80386 and later x86 processors use the base address stored in their internal &quot;descriptor&quot; cache whenever accessing memory, regardless if they are operating in real or protected mode. The &quot;selector&quot;, i.e. the 16-bit &quot;segment number&quot; visible to the programmer is used once, while reloading a segment register, to update the various fields of the respective &quot;descriptor&quot;, and then is simply disregarded.&lt;br /&gt;To enable unreal mode, the program has to enter protected mode, locate a flat descriptor in the GDT or LDT or create such, load some of the segment registers with the respective protected mode &quot;selector&quot;, then cancel back to real mode. When jumping back to RM, the processor will continue using the cached descriptors as established in PM - thus allowing access to 4 GB of &quot;extended&quot; memory from inside real mode.&lt;br /&gt;From Wikipedia, the free encyclopedia</content><link rel='replies' type='application/atom+xml' href='http://22lu.blogspot.com/feeds/5899095174184508979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19148364/5899095174184508979' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/5899095174184508979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/5899095174184508979'/><link rel='alternate' type='text/html' href='http://22lu.blogspot.com/2008/04/big-real-mode.html' title='big real mode'/><author><name>Korn</name><uri>http://www.blogger.com/profile/09578936402591597652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19148364.post-8494988387354791537</id><published>2008-04-03T16:44:00.003+08:00</published><updated>2008-04-03T17:06:10.300+08:00</updated><title type='text'>linux boot time page enable</title><content type='html'>I just read the linux kernel source code about boot time page enable, files involved are: head.S.&lt;br /&gt;32-bit kernel entry point is startup_32, it first set segments to known values, and then clear .bss segments so that there are no surprises; copy bootup parameters to boot_params, and finally, it came to setup page tables.&lt;br /&gt;The boot time page directory address is &amp;swapper_pg_dir, which on my box is 0xc0342000. The setup procedure is:&lt;br /&gt;1 set an entry in swapper_pg_dir, the first will be pg0, which is 0xc039a000, page-up-aligned of _end. &lt;br /&gt;2 Fill that entry page with physical page addresses with flags, starts from 0. That means pg0&#39;s content would be 0x0007, 0x1007, 0x2007, ... &lt;br /&gt;3 After filling the whole page over, check whether the mapped address is already large enough, by comparing the last mapped address with pg0 + sizeof(page tables) + INIT_MAP_BEYOND_END. If so, stops mapping process, or continue the process again by setting a new entry in swapper_pg_dir.&lt;br /&gt;When all these steps are finished, we are ready to enable page by setting bit 31 of cr0 register.&lt;br /&gt;BTW, as you can see by those addresses, when the pg0 page is used up, the last address we have mapped is 0x0 + 1023 * 0x1000 = 0x3ff000. and the address that we are requested to map is pg0 + sizeof(page tables) + INIT_MAP_BEYOND_END = pg0 + 0x1000 + 128 / 4 * 0x1000 = 0x3cd000, which is smaller than 0x3ff000 that we have already mapped, so this mapping process is ok to stop. And the init_pg_tables_end points to the first safe place after page tables, that would be pg0 + 0x1000 = 0x39b000.</content><link rel='replies' type='application/atom+xml' href='http://22lu.blogspot.com/feeds/8494988387354791537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19148364/8494988387354791537' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/8494988387354791537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/8494988387354791537'/><link rel='alternate' type='text/html' href='http://22lu.blogspot.com/2008/04/linux-boot-time-page-enable.html' title='linux boot time page enable'/><author><name>Korn</name><uri>http://www.blogger.com/profile/09578936402591597652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19148364.post-5250521743598419496</id><published>2008-04-02T10:27:00.007+08:00</published><updated>2008-04-03T16:44:09.243+08:00</updated><title type='text'>Find a process&#39; page tables under Linux</title><content type='html'>I&#39;ve long been crazy about page management, and now I finally made a application to play with and get an idea of the page tables that a process possesses. &lt;br /&gt;Here is the idea: first, a user program cannot access kernel space, and we have to explore page table structures in kernel mode, so I added a system call to the kernel for the user application to call. In this system service function, I get the kernel mode esp of this process and then I can get thread_info and then task_struct and then mm and finally the process&#39; pgd. And with this pgd, we can walk all the entries to see    which entry is valid and dump its contents, that&#39;s it.&lt;br /&gt;Belowe is the result that I get:&lt;br /&gt;pgd base is 0xf76e3000&lt;br /&gt;gdt entry offset 32 addr 0xf76e3080 value 0x3a5da067&lt;br /&gt;gdt entry offset 735 addr 0xf76e3b7c value 0x3a776067&lt;br /&gt;gdt entry offset 767 addr 0xf76e3bfc value 0x3a5de067&lt;br /&gt;gdt entry offset 768 addr 0xf76e3c00 value 0x000001e3&lt;br /&gt;gdt entry offset 769 addr 0xf76e3c04 value 0x004001e3&lt;br /&gt;gdt entry offset 770 addr 0xf76e3c08 value 0x008001e3&lt;br /&gt;gdt entry offset 771 addr 0xf76e3c0c value 0x00c001e3&lt;br /&gt;gdt entry offset 772 addr 0xf76e3c10 value 0x010001e3&lt;br /&gt;gdt entry offset 773 addr 0xf76e3c14 value 0x014001e3&lt;br /&gt;... ... repeat&lt;br /&gt;gdt entry offset 786 addr 0xf76e3c48 value 0x378001e3&lt;br /&gt;gdt entry offset 786 addr 0xf76e3c48 value 0x37e36163&lt;br /&gt;gdt entry offset 994 addr 0xf76e3f88 value 0x37d41067&lt;br /&gt;gdt entry offset 1022 addr 0xf76e3ff8 value 0x00003067&lt;br /&gt;gdt entry offset 1023 addr 0xf76e3ffc value 0x00002067&lt;br /&gt;&lt;br /&gt;The low 12 bits is for flags, and 067 represents _PAGE_PRESENT + _PAGE_RW + _PAGE_USER, so such pages are user accessible read write pages. and the 1e3 represents _PAGE_PRESENT + _PAGE_RW + _PAGE_DIRTY + _PAGE_ACCESSED + _PAGE_PSE + _PAGE_GLOBAL, so these pages are not accessible from user mode and this entry has PSE bit set that means this gdt entry points directly to a 4MB-aligned block of memory.&lt;br /&gt;&lt;br /&gt;The biggest kernel page we saw is 0x37e36163, and before it is 0x378001e3. so 0x378001e3 means this gdt points to a 4MB block memory that begins at 0x37800000, which is 888MB, so this block of memory is 888MB-892MB. And 0x37e36163 means it&#39;s a gdt entry, it should then point to a page at physical address 0x37e36000, which is some bytes above 892MB(more detail needed).&lt;br /&gt;&lt;br /&gt;looking at /proc/id/maps, the code page is mapped at 0x0804xxxx, so its pgd entry index is 0x0804xxxx &gt;&gt; 22 = 0x20 = 32, remember the first gdt entry dump index is exactly 32, so we know the code page is contained by gdt entry index 32. the libc.so.6  and ld-2.6.s0 are mapped to 0xb7xxxxxx, where x &gt;= 0xc, so its gdt entry is 0x2df = 735, so we know the libc and ld library is contained in pgd entry 735. user mode stack  is mapped at 0xbfexxxxx, so its gdt entry is 0x2ff = 767. there is a vdso mapped at 0xffffe000-0xfffff000, gdt entry offset 32 addr 0xf7229080 value 0x35395067 so its gdt entry is at 0x3ff = 1023. I don&#39;t know what does entry 1022 do.&lt;br /&gt;&lt;br /&gt;continue to explore user accessible pages, I found for gdt entry 32, it points to 0x35395000, flags is 067, that&#39;s rw. continue to find informations at 0x35395000, there are two entries that&#39;s valid, listed below:&lt;br /&gt;gdt entry offset 32 addr 0xf7229080 value 0x35395067&lt;br /&gt;exploring page table at 0xf5395000&lt;br /&gt;pte offset 0x48 address 0xf5395120 value 0x353f7025&lt;br /&gt;pte offset 0x49 address 0xf5395124 value 0x35127067&lt;br /&gt;so, the 0x48 indexed page is read-only and the 0x49 indexed page will be rw. that&#39;s equal to say for user address that&#39;s 0x8048xxx will be read-only and 0x8049xxx is writable. this is easily explained by looking its sections address, .text and .rodata is in the 0x08048xxx range and .data and .bss is in the 0x08049xxx range.</content><link rel='replies' type='application/atom+xml' href='http://22lu.blogspot.com/feeds/5250521743598419496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19148364/5250521743598419496' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/5250521743598419496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/5250521743598419496'/><link rel='alternate' type='text/html' href='http://22lu.blogspot.com/2008/04/find-process-page-tables-under-linux.html' title='Find a process&#39; page tables under Linux'/><author><name>Korn</name><uri>http://www.blogger.com/profile/09578936402591597652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19148364.post-302146412238615791</id><published>2008-03-06T16:05:00.000+08:00</published><updated>2008-03-06T16:06:39.473+08:00</updated><title type='text'>Sin City Trailer</title><content type='html'>&lt;object width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/YKFLrTYKIXk&quot;&gt;&lt;/param&gt;&lt;param name=&quot;wmode&quot; value=&quot;transparent&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/YKFLrTYKIXk&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/embed&gt;&lt;/object&gt;</content><link rel='replies' type='application/atom+xml' href='http://22lu.blogspot.com/feeds/302146412238615791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19148364/302146412238615791' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/302146412238615791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/302146412238615791'/><link rel='alternate' type='text/html' href='http://22lu.blogspot.com/2008/03/sin-city-trailer.html' title='Sin City Trailer'/><author><name>Korn</name><uri>http://www.blogger.com/profile/09578936402591597652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19148364.post-2325002682697854943</id><published>2008-03-06T15:55:00.008+08:00</published><updated>2008-04-27T21:46:23.350+08:00</updated><title type='text'>Linux Kernel 32-bits startup function</title><content type='html'>Actually I&#39;m still confused by linux kernel&#39;s startup and&lt;br /&gt;how filo makes it work. I&#39;ve checked the kernel image file&lt;br /&gt;(bzImage) and dumped the contents at offset (kern_header-&gt;setup_sects + 1) * 512&lt;br /&gt;and found out that the code there is head_32.S at arch/x86/boot/compressed.&lt;br /&gt;so basically the first function executed after filo transfer control to linux&lt;br /&gt;is head_32.S&#39; startup_32, which is copied by filo to physical address 0x100000.&lt;br /&gt;The address depends on the kernel image format, bzImage or zImage.&lt;br /&gt;From there on, it&#39;s all linux kernel thing.&lt;br /&gt;filo omits the 16-bits setup code entirely of the kernel, which is understandable.&lt;br /&gt;BTW, there is a appendix of understanding linux kernel on system startup that&lt;br /&gt;explains what startup_32 does.&lt;br /&gt;I just learned a little bit more about the kernel 32 bit startup functions, and learned that bzImage is obtained mainly from vmlinux.bin, setup and bootsect.&lt;br /&gt;vmlinux.bin is the binary format of vmlinux, which is ld ed from misc.o, head.o&lt;br /&gt;and piggy.o, all there three object files are in the compressed directory.&lt;br /&gt;while bootsect and setup are the 16 bits monster(I guess) that filo discarded.&lt;br /&gt;So, I&#39;ll just focus on the 32 bits files.&lt;br /&gt;misc.o is obtained from misc.c, which does most of the decompress job with the&lt;br /&gt;help of inflate.c;&lt;br /&gt;head.o is obtained from head.S, which does the start up routine, clear the BSS segment, call decompress_kernel and move the decompressed kernel to its final place 0x100000;&lt;br /&gt;piggy.o is the most interesting one, which is just a ELF wrapper for the gzipped original kernel(vmlinux)&#39;s binary format file vmlinux.bin, plus at the very beginning it adds a long type variable that is the length of the vmlinux.bin.gz. beware that this vmlinux is different from the vmlinux that I mentioned before. this vmlinux is the one located at the top directory of the src tree, and the one I mentioned before is located at the arch/i386/boot/compressed directory.&lt;br /&gt;After the startup_32 routine in head.S finished its job, the uncompressed kernel&lt;br /&gt;will begin its life at __PHYSICAL_START, which is generally at 0x100000.</content><link rel='replies' type='application/atom+xml' href='http://22lu.blogspot.com/feeds/2325002682697854943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19148364/2325002682697854943' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/2325002682697854943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/2325002682697854943'/><link rel='alternate' type='text/html' href='http://22lu.blogspot.com/2008/03/linux-kernel-32-bits-startup-function.html' title='Linux Kernel 32-bits startup function'/><author><name>Korn</name><uri>http://www.blogger.com/profile/09578936402591597652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19148364.post-6808897621241640567</id><published>2008-03-05T17:17:00.003+08:00</published><updated>2008-03-05T17:25:11.404+08:00</updated><title type='text'>LinuxBIOS and kernel</title><content type='html'>Because LinuxBIOS doesn&#39;t provide any traditional BIOS service,&lt;br /&gt;so the kernel real-mode part cannot get what it wants, like&lt;br /&gt;hard disk info, memory size info, etc.&lt;br /&gt;LinuxBIOS makes use of a payload acting as a boot loader, which&lt;br /&gt;is responsible to load a linux kernel. This payload understands&lt;br /&gt;the tables that LinuxBIOS provided so it can generate the info&lt;br /&gt;the linux kernel needs without the help of BIOS service.&lt;br /&gt;And filo(one of a payload) sets these info in its own defined structure, linux_init_params, and before transfer control to linux kernel, it sets&lt;br /&gt;esi to the address of linux_init_params, so linux kernel 32 bit code entry&lt;br /&gt;function could get these info and copy them to boot_params in head_32.S.&lt;br /&gt;boot_params of linux kernel is originally used for convey infos from 16-bit&lt;br /&gt;setup code to 32-bit kernel code, so I think filo has done pretty good a job.</content><link rel='replies' type='application/atom+xml' href='http://22lu.blogspot.com/feeds/6808897621241640567/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19148364/6808897621241640567' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/6808897621241640567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/6808897621241640567'/><link rel='alternate' type='text/html' href='http://22lu.blogspot.com/2008/03/linuxbios-and-kernel.html' title='LinuxBIOS and kernel'/><author><name>Korn</name><uri>http://www.blogger.com/profile/09578936402591597652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19148364.post-2402438763873305112</id><published>2008-02-18T15:29:00.002+08:00</published><updated>2008-02-18T15:40:33.861+08:00</updated><title type='text'>过年回家</title><content type='html'>今年过年回家了，带着老婆，在邯郸机场双飞的。去的时候爸去接的我们，飞机晚点了3个小时。回到家感觉好亲切，爸妈和妹妹都还没有吃晚饭在等着我们一起。实际上我们已经在飞机上吃过了，所以并不饿。唉，爸妈对我们太好了。接下来开始每天猪一般的生活，睡觉看电视聊天，确实是休息啊，以至于到现在我还没有恢复过来，进入不了上班的状态。这次回家没见什么同学，就是想多在家陪陪爸妈。可惜的是在临回上海三天的时候，竟然发烧了，sigh。在上飞机的时候病都没好，回到上海继续闹了3天，很久没的病了，这次终于“如愿”了。走的时候爸妈都出动为我送行了，可惜当天状态不好，早早地进入了候机厅，没有和爸妈在外面多呆一会。不知道何时才能再见面啊</content><link rel='replies' type='application/atom+xml' href='http://22lu.blogspot.com/feeds/2402438763873305112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/19148364/2402438763873305112' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/2402438763873305112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19148364/posts/default/2402438763873305112'/><link rel='alternate' type='text/html' href='http://22lu.blogspot.com/2008/02/blog-post.html' title='过年回家'/><author><name>Korn</name><uri>http://www.blogger.com/profile/09578936402591597652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>