﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-星光灿烂</title><link>http://www.cppblog.com/agaric/</link><description>C元素</description><language>zh-cn</language><lastBuildDate>Tue, 07 Apr 2026 19:29:50 GMT</lastBuildDate><pubDate>Tue, 07 Apr 2026 19:29:50 GMT</pubDate><ttl>60</ttl><item><title>一段s3c lcd framebuffer 的代码</title><link>http://www.cppblog.com/agaric/archive/2008/04/17/47331.html</link><dc:creator>菌子</dc:creator><author>菌子</author><pubDate>Thu, 17 Apr 2008 04:52:00 GMT</pubDate><guid>http://www.cppblog.com/agaric/archive/2008/04/17/47331.html</guid><wfw:comment>http://www.cppblog.com/agaric/comments/47331.html</wfw:comment><comments>http://www.cppblog.com/agaric/archive/2008/04/17/47331.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/agaric/comments/commentRss/47331.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/agaric/services/trackbacks/47331.html</trackback:ping><description><![CDATA[<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;&nbsp;1</span>&nbsp;<span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;__init&nbsp;s3c_fb_probe(</span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;platform_device&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">pdev)<br></span><span style="color: #008080;">&nbsp;&nbsp;2</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">&nbsp;&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;driver_name[]</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">s3c_fb</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;ret;<br></span><span style="color: #008080;">&nbsp;&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;index</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;&nbsp;6</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(index</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;index</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">S3C_FB_NUM;&nbsp;index</span><span style="color: #000000;">++</span><span style="color: #000000;">){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">遍历每一个fb,我们里只有一个lcd.</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;&nbsp;8</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s3c_fb_init_fbinfo(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">info[index],&nbsp;driver_name,&nbsp;index);<br></span><span style="color: #008080;">&nbsp;&nbsp;9</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(index</span><span style="color: #000000;">==</span><span style="color: #000000;">0</span><span style="color: #000000;">){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">操作主lcd</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;11</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s3c_fb_backlight_power(</span><span style="color: #000000;">1</span><span style="color: #000000;">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">开启背光，lcd电源源，开启背光等。 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;12</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s3c_fb_lcd_power(</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br></span><span style="color: #008080;">&nbsp;13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s3c_fb_backlight_level(DEFAULT_BACKLIGHT_LEVEL);<br></span><span style="color: #008080;">&nbsp;14</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dprintk(</span><span style="color: #000000;">"</span><span style="color: #000000;">dev&nbsp;FB&nbsp;init\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br></span><span style="color: #008080;">&nbsp;16</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">映射内存区域</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;18</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #000000;">request_mem_region((unsigned&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">)S3C_VA_LCD,&nbsp;SZ_1M,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">s3c-lcd</span><span style="color: #000000;">"</span><span style="color: #000000;">))&nbsp;{<br></span><span style="color: #008080;">&nbsp;19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">EBUSY;<br></span><span style="color: #008080;">&nbsp;20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">goto</span><span style="color: #000000;">&nbsp;dealloc_fb;<br></span><span style="color: #008080;">&nbsp;21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">&nbsp;22</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dprintk(</span><span style="color: #000000;">"</span><span style="color: #000000;">got&nbsp;LCD&nbsp;region\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br></span><span style="color: #008080;">&nbsp;24</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">打开lcd_clock</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;26</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcd_clock&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;clk_get(NULL,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">lcd</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br></span><span style="color: #008080;">&nbsp;27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #000000;">lcd_clock)&nbsp;{<br></span><span style="color: #008080;">&nbsp;28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(KERN_INFO&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">failed&nbsp;to&nbsp;get&nbsp;lcd&nbsp;clock&nbsp;source\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br></span><span style="color: #008080;">&nbsp;29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">ENOENT;<br></span><span style="color: #008080;">&nbsp;30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">goto</span><span style="color: #000000;">&nbsp;release_irq;<br></span><span style="color: #008080;">&nbsp;31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">&nbsp;32</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clk_enable(lcd_clock);<br></span><span style="color: #008080;">&nbsp;34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(</span><span style="color: #000000;">"</span><span style="color: #000000;">S3C_LCD&nbsp;clock&nbsp;got&nbsp;enabled&nbsp;::&nbsp;%ld.%03ld&nbsp;Mhz\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;print_mhz(clk_get_rate(lcd_clock)));<br></span><span style="color: #008080;">&nbsp;35</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;36</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msleep(</span><span style="color: #000000;">5</span><span style="color: #000000;">);<br></span><span style="color: #008080;">&nbsp;37</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">&nbsp;38</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;39</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">申请显存</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;40</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;Initialize&nbsp;video&nbsp;memory&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;41</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;s3c_fb_map_video_memory(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">info[index]);<br></span><span style="color: #008080;">&nbsp;42</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(ret)&nbsp;{<br></span><span style="color: #008080;">&nbsp;43</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(</span><span style="color: #000000;">"</span><span style="color: #000000;">Failed&nbsp;to&nbsp;allocate&nbsp;video&nbsp;RAM:&nbsp;%d\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;ret);<br></span><span style="color: #008080;">&nbsp;44</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">ENOMEM;<br></span><span style="color: #008080;">&nbsp;45</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">goto</span><span style="color: #000000;">&nbsp;release_clock;<br></span><span style="color: #008080;">&nbsp;46</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">&nbsp;47</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dprintk(</span><span style="color: #000000;">"</span><span style="color: #000000;">got&nbsp;video&nbsp;memory\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br></span><span style="color: #008080;">&nbsp;48</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;49</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">初始化寄存器，这里与具体的设备有关。</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;50</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;s3c_fb_init_registers(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">info[index]);<br></span><span style="color: #008080;">&nbsp;51</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;s3c_fb_check_var(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">info[index].fb.var,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">info[index].fb);<br></span><span style="color: #008080;">&nbsp;52</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;53</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">所谓的色表（调色盘？），不清除是干啥的。</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;54</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(index</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">2</span><span style="color: #000000;">){<br></span><span style="color: #008080;">&nbsp;55</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;2007-01-09-Tue.&nbsp;for&nbsp;RGB&nbsp;8-8-8&nbsp;palette</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;56</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(fb_alloc_cmap(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">info[index].fb.cmap,&nbsp;</span><span style="color: #000000;">256</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">0</span><span style="color: #000000;">){<br></span><span style="color: #008080;">&nbsp;57</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">goto</span><span style="color: #000000;">&nbsp;dealloc_fb;<br></span><span style="color: #008080;">&nbsp;58</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">&nbsp;59</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">&nbsp;60</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{<br></span><span style="color: #008080;">&nbsp;61</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;2007-01-09-Tue.&nbsp;for&nbsp;RGB&nbsp;8-8-8&nbsp;palette</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;62</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(fb_alloc_cmap(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">info[index].fb.cmap,&nbsp;</span><span style="color: #000000;">16</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">0</span><span style="color: #000000;">){<br></span><span style="color: #008080;">&nbsp;63</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">goto</span><span style="color: #000000;">&nbsp;dealloc_fb;<br></span><span style="color: #008080;">&nbsp;64</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">&nbsp;65</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">&nbsp;66</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">注册framebuffer??</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;67</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;register_framebuffer(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">info[index].fb);<br></span><span style="color: #008080;">&nbsp;68</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(ret&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)&nbsp;{<br></span><span style="color: #008080;">&nbsp;69</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(KERN_ERR&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">Failed&nbsp;to&nbsp;register&nbsp;framebuffer&nbsp;device:&nbsp;%d\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;ret);<br></span><span style="color: #008080;">&nbsp;70</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">goto</span><span style="color: #000000;">&nbsp;free_video_memory;<br></span><span style="color: #008080;">&nbsp;71</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">&nbsp;72</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(index=0;&nbsp;index&lt;CONFIG_FB_NUM;&nbsp;index++)<br></span><span style="color: #008080;">&nbsp;73</span>&nbsp;<span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;74</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;initialize&nbsp;the&nbsp;struct&nbsp;for&nbsp;Waitforvsync<br></span><span style="color: #008080;">&nbsp;75</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;"> 关于中断的初始化工作，貌似2412是注册以后又取消了</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;76</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;s3cfb_vSyncInfo.count&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;77</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;init_waitqueue_head(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">s3cfb_vSyncInfo.waitQueue);<br></span><span style="color: #008080;">&nbsp;78</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;79</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">#if</span><span style="color: #000000;">&nbsp;defined(CONFIG_ARCH_S3C2443)</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;80</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;request_irq(IRQ_LCD3,&nbsp;s3c_fb_irq,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">s3c-lcd</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;pdev);<br></span><span style="color: #008080;">&nbsp;81</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">#elif</span><span style="color: #000000;">&nbsp;defined(CONFIG_ARCH_S3C6400)</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;82</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;request_irq(IRQ_LCD_VSYNC,&nbsp;s3c_fb_irq,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">s3c-lcd</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;pdev);<br></span><span style="color: #008080;">&nbsp;83</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">#elif</span><span style="color: #000000;">&nbsp;defined&nbsp;(CONFIG_S3C_DVS)&nbsp;&amp;&amp;&nbsp;defined&nbsp;(CONFIG_ARCH_S3C2412)</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;84</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;request_irq(IRQ_LCD,&nbsp;s3c_dvs_irq,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">s3c-lcd</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;pdev);<br></span><span style="color: #008080;">&nbsp;85</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">#endif</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;86</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(ret&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)&nbsp;{<br></span><span style="color: #008080;">&nbsp;87</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(</span><span style="color: #000000;">"</span><span style="color: #000000;">Failed&nbsp;to&nbsp;install&nbsp;irq&nbsp;(%d)\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;ret);<br></span><span style="color: #008080;">&nbsp;88</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">goto</span><span style="color: #000000;">&nbsp;release_irq;<br></span><span style="color: #008080;">&nbsp;89</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">&nbsp;90</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;91</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">#if</span><span style="color: #000000;">&nbsp;defined&nbsp;(CONFIG_S3C_DVS)&nbsp;&amp;&nbsp;defined&nbsp;(CONFIG_ARCH_S3C2412)</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;92</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;disable_irq(IRQ_LCD);<br></span><span style="color: #008080;">&nbsp;93</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">#endif</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;94</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;95</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">在sys底下建立节点，用于和用户空间交互</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;96</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;create&nbsp;device&nbsp;files&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;97</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;device_create_file(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">(pdev</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">dev),&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">dev_attr_backlight_power);<br></span><span style="color: #008080;">&nbsp;98</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;device_create_file(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">(pdev</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">dev),&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">dev_attr_backlight_level);<br></span><span style="color: #008080;">&nbsp;99</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;device_create_file(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">(pdev</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">dev),&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">dev_attr_lcd_power);<br></span><span style="color: #008080;">100</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">101</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">胜利退出</span><span style="color: #008000;"><br></span><span style="color: #008080;">102</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;printk(KERN_INFO&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">fb%d:&nbsp;%s&nbsp;frame&nbsp;buffer&nbsp;device\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,<br></span><span style="color: #008080;">103</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;info[index].fb.node,&nbsp;info[index].fb.fix.id);<br></span><span style="color: #008080;">104</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #008080;">105</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">106</span>&nbsp;<span style="color: #000000;">free_video_memory:<br></span><span style="color: #008080;">107</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;s3c_fb_unmap_video_memory(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">info[index]);<br></span><span style="color: #008080;">108</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">109</span>&nbsp;<span style="color: #000000;">release_clock:<br></span><span style="color: #008080;">110</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;clk_disable(lcd_clock);<br></span><span style="color: #008080;">111</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;clk_put(lcd_clock);<br></span><span style="color: #008080;">112</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">113</span>&nbsp;<span style="color: #000000;">release_irq:<br></span><span style="color: #008080;">114</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">#if</span><span style="color: #000000;">&nbsp;defined(CONFIG_ARCH_S3C2443)</span><span style="color: #000000;"><br></span><span style="color: #008080;">115</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;free_irq(IRQ_LCD3,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">info);<br></span><span style="color: #008080;">116</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">#elif</span><span style="color: #000000;">&nbsp;defined(CONFIG_ARCH_S3C6400)</span><span style="color: #000000;"><br></span><span style="color: #008080;">117</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;free_irq(IRQ_LCD_VSYNC,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">info);<br></span><span style="color: #008080;">118</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">#endif</span><span style="color: #000000;"><br></span><span style="color: #008080;">119</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">release_mem:</span><span style="color: #008000;"><br></span><span style="color: #008080;">120</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;release_mem_region((unsigned&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">)S3C_VA_LCD,&nbsp;S3C_SZ_LCD);<br></span><span style="color: #008080;">121</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">122</span>&nbsp;<span style="color: #000000;">dealloc_fb:<br></span><span style="color: #008080;">123</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;framebuffer_release(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">info[index].fb);<br></span><span style="color: #008080;">124</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;ret;<br></span><span style="color: #008080;">125</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">126</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">127</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">128</span>&nbsp;<span style="color: #000000;"></span></div>
<br> <img src ="http://www.cppblog.com/agaric/aggbug/47331.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/agaric/" target="_blank">菌子</a> 2008-04-17 12:52 <a href="http://www.cppblog.com/agaric/archive/2008/04/17/47331.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>读《Linux 内核设计与实现》</title><link>http://www.cppblog.com/agaric/archive/2008/03/06/43779.html</link><dc:creator>菌子</dc:creator><author>菌子</author><pubDate>Wed, 05 Mar 2008 16:00:00 GMT</pubDate><guid>http://www.cppblog.com/agaric/archive/2008/03/06/43779.html</guid><wfw:comment>http://www.cppblog.com/agaric/comments/43779.html</wfw:comment><comments>http://www.cppblog.com/agaric/archive/2008/03/06/43779.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cppblog.com/agaric/comments/commentRss/43779.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/agaric/services/trackbacks/43779.html</trackback:ping><description><![CDATA[<p>&nbsp;</p> <h1>第二章 从内核出发</h1> <p>&nbsp;</p> <h3>内核开发特点： </h3> <ol> <li>没有libc库。 kernel是一个不依赖任何库的，包括标准C函数库。kernel中使用的一些常见函数，比如memset, strcpy都是在kernel代码中自己实现的。  <li>请使用gcc来编译内核，因为内核中的代码并不完全符合ANSI C的标准。  <li>没有内存保护，非法的内存操作可能会使系统挂起。  <li>不要使用浮点数  <li>内核栈容量很小（ 2 * 页面大小 ）  <li>linux是抢占多任务操作系统，进程，内核都可以抢占，而且支持多处理器，所以内核代码需要考虑并发和同步的问题。  <li>尽量要兼容所有架构(arch)，良好的移植性</li></ol> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <h1>第三章 进程管理</h1> <p>&nbsp;</p> <h3>内存描述符及任务结构</h3> <ol> <li>每个进程都对应有一个进程描述符，即task_struct结构，用来记录这个进程的所有信息：打开的文件，地址空间，进程状态……  <li>linux通过slab（个人感觉类似于pool）分配task_struct。 进程的task_struct指针存放在位于内核栈底的一个叫做thread_info的结构里面。  <li>内核通过PID来标识进程，默认设置最大值，即默认系统最大进程数为32768。内核中一般通过current宏来获的当前进程的task_struct,不同的体系架构下，实现方法可能会不同。  <li>进程状态，可以通过set_task_state来设置  <ol> <li>TASK_RUNNING 进程可执行；它正在运行，或者是在任务队列中等待被运行。  <li>TASK_INTERRUPTIBLE 进程可中断；进程被阻塞，但是可以通过信号，或者其他方法唤醒。  <li>TASK_UNINTERRUPTIBLE 进程不可中断；进程被阻塞，而且不受任何干扰，不会响应信号而被唤醒。  <li>TASK_ZOMBIE 进程僵死；进程已经运行完毕，但是父进程没有调用wait4系统调用，此时子进程的task_struct保留，等待父进程查询相关信息。【Agaric:相似的，在windows上，进程的HANDLE通过（CreateProcess或者OpenProcess得到） 在程序运行完毕后，在CloseHandle 前，也是仍然有效，用于查询进程相关信息，比如Exit code 等等】  <li>TASK_STOPPED 进程停止;</li></ol> <li>进程上下文： 进程通过系统调用或者异常陷入内核，此时内核是"代表进程"在工作，这个工作环境，叫做进程上下文，内核程序可以通过宏来获的当前进程的task_struct  <li>进程家族树： 除了init，每个进程都有父进程， 每个进程都可能有子进程及兄弟进程。</li></ol> <p>（待续）</p><img src ="http://www.cppblog.com/agaric/aggbug/43779.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/agaric/" target="_blank">菌子</a> 2008-03-06 00:00 <a href="http://www.cppblog.com/agaric/archive/2008/03/06/43779.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OpenSuse 10.3 上配置svn 服务器</title><link>http://www.cppblog.com/agaric/archive/2008/03/01/43522.html</link><dc:creator>菌子</dc:creator><author>菌子</author><pubDate>Sat, 01 Mar 2008 09:08:00 GMT</pubDate><guid>http://www.cppblog.com/agaric/archive/2008/03/01/43522.html</guid><wfw:comment>http://www.cppblog.com/agaric/comments/43522.html</wfw:comment><comments>http://www.cppblog.com/agaric/archive/2008/03/01/43522.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/agaric/comments/commentRss/43522.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/agaric/services/trackbacks/43522.html</trackback:ping><description><![CDATA[<br>
<h2 style="color: #000000;">配置svnserver</h2>
<ol>
</ol>
可以直接在YaST2里面，在xinetd设置里面，添加svnserve的选项。<br>但是要注意运行使用的用户，默认的svn:svn是没有被建立的， 我改成nobody以后就ok了，但不知道有什么什么问题。<br><br><br>
<h2 style="color: #000000;">配置APACHE</h2>
采用svnserver的方法有许多不便，所以我还是决定最终采用http的方法。<br>OpenSuse的apache2的配置文件布局似乎和其他系统有点不一样。 它在httpd.conf里面并没有直接进行的配置，而是包含了其他很多的conf文件，其中的每一个conf，包含了某一个具体部分的配置。<br><br>ls /etc/apache2/<br><br>charset.conv&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; httpd.conf&nbsp;&nbsp; mod_autoindex-defaults.conf&nbsp; mod_status.conf&nbsp;&nbsp;&nbsp;&nbsp; ssl.crl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ssl.key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vhosts.d<br>conf.d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; listen.conf&nbsp; mod_info.conf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mod_userdir.conf&nbsp;&nbsp;&nbsp; ssl.crt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ssl.prm<br>default-server.conf&nbsp; magic&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mod_log_config.conf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mod_usertrack.conf&nbsp; ssl.csr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sysconfig.d<br>errors.conf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mime.types&nbsp;&nbsp; mod_mime-defaults.conf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server-tuning.conf&nbsp; ssl-global.conf&nbsp; uid.conf<br><br>配置svn 使用 apache 的文章很多，我就不重复具体的配置方法了，只是说明一下在suse10.3上具体需要修改的文件。<br>/etc/apache2/conf.d/subversion.conf&nbsp;&nbsp;&nbsp; 这个文件被httpd.conf所包含，用来修改svn目录及一些设置，一般教程里面都是修改httpd.conf.<br>/etc/apache2/sysconfig.d/loadmodule.conf 用来在apache启动时加载模块用。 <br><br>我最终解决mod_dav_svn加载的方法是，在/usr/lib/apache2-prefork/ 下建立一个 mod_dav_svn.so的链接（位于 /usr/lib/apache2）这样在YaST的httpserver设定里面就可以选择和加载这个模块了。 就是这个问题，花了我好几个消失来解决。<br><br>其他的配置方法，可以参考svn中文手册，和网上其他的配置教程。<br>&nbsp;<br><br><br><br><br><br><br><br>
&nbsp; &nbsp;&nbsp;
<ol>
</ol>
<br><br><img src ="http://www.cppblog.com/agaric/aggbug/43522.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/agaric/" target="_blank">菌子</a> 2008-03-01 17:08 <a href="http://www.cppblog.com/agaric/archive/2008/03/01/43522.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一些参考文章地址</title><link>http://www.cppblog.com/agaric/archive/2008/02/02/42415.html</link><dc:creator>菌子</dc:creator><author>菌子</author><pubDate>Sat, 02 Feb 2008 15:41:00 GMT</pubDate><guid>http://www.cppblog.com/agaric/archive/2008/02/02/42415.html</guid><wfw:comment>http://www.cppblog.com/agaric/comments/42415.html</wfw:comment><comments>http://www.cppblog.com/agaric/archive/2008/02/02/42415.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/agaric/comments/commentRss/42415.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/agaric/services/trackbacks/42415.html</trackback:ping><description><![CDATA[http://blog.chinaunix.net/u1/34474/showart_404278.html<br><br>http://blog.chinaunix.net/u1/41638/showart_438078.html<br><br>http://blog.csdn.net/fudan_abc/<br><br><img src ="http://www.cppblog.com/agaric/aggbug/42415.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/agaric/" target="_blank">菌子</a> 2008-02-02 23:41 <a href="http://www.cppblog.com/agaric/archive/2008/02/02/42415.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>kernel 2.6.23.9  移植到 S3C2412平台</title><link>http://www.cppblog.com/agaric/archive/2008/01/28/42076.html</link><dc:creator>菌子</dc:creator><author>菌子</author><pubDate>Mon, 28 Jan 2008 15:30:00 GMT</pubDate><guid>http://www.cppblog.com/agaric/archive/2008/01/28/42076.html</guid><wfw:comment>http://www.cppblog.com/agaric/comments/42076.html</wfw:comment><comments>http://www.cppblog.com/agaric/archive/2008/01/28/42076.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/agaric/comments/commentRss/42076.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/agaric/services/trackbacks/42076.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<p>我使用的不是SMDK2412的开发板，而是公司已经出货的2412的机器，原来用的是自己的一个OS，现在打算在他上面运行linux.</p>
<p>编译2.6的内核，需要比较新的gcc, 我暂时能找到的新版arm-linux-gcc也就是3.4.1。，之前用arm-none-linux-eabi-gcc 4.1编出来的zImage好大，基本不能用。对于开发工具和内核版本，我觉得还是越新越好（稳定版），否则可能会遇到一些稀奇古怪的问题。</p>
<p>1.修改Boot </p>
<p>使用公司原有的Boot, 在Boot启动Kernel的时候，加入的参数设定，然后用公司专用的usb更新工具烧录kernel到flash中，启动机器以后显示了一堆乱码，在启动参数 console=ttySAC0后面加上了,115200，设定波特率以后一切OK.</p>
<p>2.MTD分区：修改文件common-smdk.c ， 修改其中的MTD设备的分区。</p>
<p>新的kernel里面已经有了默认分区表，我们只要根据我们需要来做部分修改就可以，我的nand有512MB， 我目前只是将前面的2M分给boot,kernel, 紧接下来的4M分给rootfs，打算暂时加载一个 简单的cramfs。其他的nand都还没有用。</p>
<p>3.取消NAND驱动中的ECC读校验，以及坏块监测部分, 因为NAND操作部分，boot和kernel有一些不同。</p>
<p>重启以后，mount root分区失败，还打出了I/O 错误。 关闭了ECC校验，修改了pc工具的烧录地址以后，ok. 这都是因为我们的烧录工具使用的地址表示方法和ecc的方式有一些不同。</p>
<p>4.烧录 root 文件系统。</p>
<p>拿了一个在kernel2.4 2440 上用过得cramfs直接来用，提示找不到dev/console， 上网查了一遍，应该是因为现在新版的kernel去掉了devfs的缘故，为了先快速的有一个可执行环境，所以在网上找了一个现成的，已经自己建立好节点的cramfs，里面的busybox版本也比较新。 </p>
<p>&nbsp;</p>
<p>开机运行，总算见到了亲爱的shell.</p>
<img src ="http://www.cppblog.com/agaric/aggbug/42076.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/agaric/" target="_blank">菌子</a> 2008-01-28 23:30 <a href="http://www.cppblog.com/agaric/archive/2008/01/28/42076.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于Fedora二三事</title><link>http://www.cppblog.com/agaric/archive/2008/01/14/41163.html</link><dc:creator>菌子</dc:creator><author>菌子</author><pubDate>Mon, 14 Jan 2008 15:50:00 GMT</pubDate><guid>http://www.cppblog.com/agaric/archive/2008/01/14/41163.html</guid><wfw:comment>http://www.cppblog.com/agaric/comments/41163.html</wfw:comment><comments>http://www.cppblog.com/agaric/archive/2008/01/14/41163.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/agaric/comments/commentRss/41163.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/agaric/services/trackbacks/41163.html</trackback:ping><description><![CDATA[工作需要，加之好奇心，终于给自己家的PC里面也安装上了Linux。 为了和公司的OpenSuse有所不同于是就选择另一款大名顶顶的发行版Fedora.<br><br>我一直认为，人生总是要遇到一些挫折的。 可不就是装个系统嘛，为啥就要这样难为我捏？<br><br>懒得插上光驱，于是就用硬盘安装的办法。 可grub for dos 就是不认我从ISO里解出来的vmlinuz, <img src="http://www.cppblog.com/CuteSoft_Client/CuteEditor/images/emdgust.gif" align="absmiddle" border="0"> 汗，放狗去搜，貌似没有人遇到过这个情况。不能就这样放弃吧？再看看解压出来的一个jpg，居然也打不开，nnd是不是文件解错了。 之前我解文件用的是winrar, 换成 Deamon Tools 试试， NND 这次那附图OK了。 再用grub来load ， OK! 额。。 原来winrar在解iso的时候会掉链子， 伙计们以后要千万小心。<br><br>以后的事就顺利多了。&nbsp; 装显卡驱动，直接用yum的包就可以啦，不过装完以后需要修改grub的list，因为内核也更新了，需要从新的内核启动，显卡驱动才可以奏效。Fedora默认已经安装了桌面特效，显卡驱动安装完以后，直接在菜单里面选择打开特效就OK. 嘿嘿，效果还可以吧。<br><br>&nbsp;<img style="border-color: #0a0000;" alt="" src="http://www.cppblog.com/images/cppblog_com/agaric/WindowsLiveWriter/Screenshot.png" border="2" height="500" width="800"><br><br><br>接下来就是解决QQ滴问题了。 开始用Pigin，只能聊天，而且只能看见在线的好友，勉强能用，后来又装了wine上面的qq2007,应该是配置的问题，总是crash。 不过最后发现了lumaQQ和eva这两个好东东。 我本人还是比较喜欢eva的，功能很全了，界面也很友好，只可惜这个家伙不能像其他的一些KDE程序在gnome下也能正常运行，只能在KDE下玩儿。LumaQQ作者现在主要在维护iphone版本的， 普通的java版有一段时间没更新了， 现在还能常用， 界面也还好。<br><br>这几天综合下来，感觉Fedora还算不错，但是易用性上面，不如Opensuse。 至于 ubuntu ， 我用的不多， 感觉优点是国内源多，所以更新和下载程序速度比较快。<br><br><img src="http://www.cppblog.com/CuteSoft_Client/CuteEditor/images/emcrook.gif" align="absmiddle" border="0"> 工作的任务是一直Linux内核，现在看来，还有很多东西要学，很多路要走。<br><br>我觉得对于这样比较长期／艰巨的任务，相我这样工作经验不丰富的人，很难针对它来指定一个计划， 其实就是很难将其分割成一步步来完成的小计划。导致每天都晕晕呼呼的不知道干什么好。 希望有经验的朋友能给点建议。<br><br><br><span style="color: red;">Winrar解ISO可能会掉链子<br><br>对Linux有兴趣的初学者，不妨亲身在机器上安装一个易用的发行版（非虚拟机， 推荐Ubuntu, Opensuse10.3（KDE））<br></span> <img src ="http://www.cppblog.com/agaric/aggbug/41163.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/agaric/" target="_blank">菌子</a> 2008-01-14 23:50 <a href="http://www.cppblog.com/agaric/archive/2008/01/14/41163.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[zz]Who   do   you   think   is   the   best   coder,   and   why</title><link>http://www.cppblog.com/agaric/archive/2007/12/23/39310.html</link><dc:creator>菌子</dc:creator><author>菌子</author><pubDate>Sat, 22 Dec 2007 16:39:00 GMT</pubDate><guid>http://www.cppblog.com/agaric/archive/2007/12/23/39310.html</guid><wfw:comment>http://www.cppblog.com/agaric/comments/39310.html</wfw:comment><comments>http://www.cppblog.com/agaric/archive/2007/12/23/39310.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/agaric/comments/commentRss/39310.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/agaric/services/trackbacks/39310.html</trackback:ping><description><![CDATA[MIT &nbsp; BBS上说微软电话面试的一道题就是&#8220;Who &nbsp; do &nbsp; you &nbsp; think &nbsp; is &nbsp; the &nbsp; best &nbsp; coder, &nbsp; and &nbsp; why?&#8221;。我觉得挺有意思的，也来凑个热闹。排名不分先后。 <br>  <br>
Bill &nbsp; Joy, &nbsp; 前任Sun的首席科学家，当年在Berkeley时主持开发了最早版本的BSD。他还是vi和csh的作者。当然，Csh
&nbsp; Programming &nbsp; Considered &nbsp; Harmful &nbsp;
是另一个话题乐。据说他想看看自己能不能写个操作系统，就在三天里写了个自己的Unix, &nbsp; &nbsp;
也就是BSD的前身。当然是传说了，但足见他的功力。另一个传说是，1980年初的时候，DARPA让BBN在Berkley &nbsp;
Unix里加上BBN开发的TCP/IP代码。但当时还是研究生的B伯伯怒了，拒绝把BBN &nbsp;
TCP/IP加入BSD，因为他觉得BBN的TCP/IP写得不好。于是B伯伯出手了，端的是一箭封喉，很快就写出了高性能的伯克利版TCP/IP。当时
&nbsp; BBN和DARPA签了巨额合同开发TCP/IP &nbsp;
Stack，谁知他们的代码还不如一个研究生的好。于是他们开会。只见当时B伯伯穿个T-shirt出现在会议室(当时穿T-shirt不象现在，还是相
当散漫的哈)。只见BBN问：你怎么写出来的？而B伯伯答：简单，你读协议，然后编程就行了。最令偶晕倒的是，B伯伯硕士毕业后决定到工业界发展，于是就
到了当时只有一间办公室的Sun, &nbsp; 然后他就把Sparc设计出来乐。。。象这种软硬通吃的牛人，想不佩服都不行的说。据Bill &nbsp;
Joy的同事说，一般开会的时候B伯伯总是拿一堆杂志漫不经心地读。但往往在关键之处，B伯伯发言，直切要害，提出漂亮的构想，让同事们彻底崩溃。对了，
他还是Java &nbsp; Spec和JINI的主要作者之一。 <br>  <br>  <br> John &nbsp; Carmack，ID &nbsp;
Software的founder和Lead &nbsp; Programmer。上个月和一个搞图形的师兄聊天，他竟然不知道John &nbsp; Carmack,
&nbsp;
也让偶大大地晕了一把。不过也许搞研究的和搞实战的多少有些隔吧。想必喜欢第一人称射击游戏的都知道J哥哥。90年代初只要能在PC上搞个小动画都能让人
惊叹一番的时候，J哥哥就推出了石破天惊的Castle &nbsp; Wolfstein, &nbsp; 然后再接再励，doom, &nbsp; doomII, &nbsp;
Quake...每次都把3-D技术推到极 <br> 限。J哥哥的简历上说自己的专长是"Exhaust &nbsp; 3-D &nbsp;
technology"，真是牛人之言不我欺的说。做J哥哥这样的人是很幸福的，因为各大图形卡厂家一有了新产品就要向他&#8220;进贡&#8221; &nbsp;
，不然如果他的游戏不支持哪种卡，哪种卡基本就会夭折乐。当初MS的Direct3D也得听取他的意见，修改了不少API。当然，J哥哥在结婚前十数年如
一日地每天编程14小时以上，也是偶们凡人望尘莫及的。对了，J哥哥高中肆业(？)，可以说是自学成才。不过呢，谁要用这个例子来为自己学习不好辩护，就
大错特错了。那 &nbsp; Leonardo &nbsp; Da &nbsp;
Vinci还是自学成才呢(人是私生子，不能上学)。普通人和天才还是有区别的。对了，其实偶们叫&#8220;达分奇&#8221;是相当不对的，因为Vinci是地名，而Da
&nbsp; Vinci就是从Vinci来的人的意思。换句话说，Leonardo &nbsp; Da &nbsp;
Vinci就是&#8220;从Vinci来的Leonardo&#8221;的意思。叫别人&#8220;Da &nbsp; Vinci&#8221;就不知所谓乐。嗯，扯远了，打住。 <br>  <br>
David &nbsp; Cutler，VMS和Windows &nbsp;
NT的首席设计师，去微软前号称硅谷最牛的kernel开发员。当初他和他的手下在微软一周内把一个具备基本功能的bootable &nbsp;
kernel写出来，然后说：&#8220;who &nbsp; can't &nbsp; write &nbsp; an &nbsp; OS &nbsp; in &nbsp; a &nbsp;
week?"，也是牛气冲天的说。顺便说一句，D爷爷到NT3.5时，管理1500名开发员，自己还兼做设计和编程，不改coder本色啊。 <br>  <br>
D爷爷天生脾气火爆，和人争论时喜欢双手猛击桌子以壮声势。:-) &nbsp; 日常交谈F-word不离口。他面试秘书时必问："what &nbsp; do &nbsp;
you &nbsp; think &nbsp; of &nbsp; the &nbsp; word &nbsp; 'fuk'?" &nbsp;
，让无数美女刹羽而归。终于有一天，一个同样火爆的女面对这个问题脱口而出："That's &nbsp; my &nbsp; favorite &nbsp;
word"。于是她被录取乐，为D爷爷工作到NT3.5发布。 <br>  <br> Don &nbsp;
Knuth。高爷爷其实用不着偶多说。学编程的不知道他就好像学物理的不知道牛顿，学数学的不知道欧拉，学音乐的不知道莫扎特，学Delphi的不知到
&nbsp; Anders &nbsp; Hejlsberg，或者学Linux不知道Linus &nbsp;
Torvalds一样，不可原谅啊。:-)为了让文章完整，就再罗唆几句吧。高爷爷本科时就开始给行行色色的公司写各种稀奇古怪的编译器挣外快了。他卖给
别人时收一两千美元，那些公司拿了code，加工一下卖出去就是上万上十万。不过也没见高爷爷不爽过，学者本色的说。想想那可是60年代初啊，高爷爷写编
译器写多了，顺带就搞出了个Attribute &nbsp;
Grammar和LR(k)，大大地造福后人啊。至于高爷爷在CalTech的编程比赛(有Alan &nbsp;
Kay得众多高高手参加)总是第一，写的Tex到86年就code &nbsp; freeze，还附带2^n美分奖励等等都是耳熟能详的，偶就不饶舌乐。 <br>  <br>
顺便说一下，高老大爷是无可争议的写作高手。他给Concrete &nbsp; Mathematics &nbsp;
写的前言可谓字字铿锵，堪为前言的典范。他的技术文章也是一绝，文风细致，解释精当，而且没有学究气，不失轻快跳脱。记得几年前读Concrete &nbsp;
Mathemathics，时不时开怀大笑，让老妈极其郁闷，觉得我nerdy到家，不可救药。其实呢，子非鱼，安知鱼之乐，更不知那完全是高爷爷的功
劳。说到写作高手，不能不提Stephen &nbsp; A. &nbsp;
Cook。他的文章当年就被我们的写作老师极力推荐，号称典雅文风的样本。库爷爷一头银发，身材颀长，总是面带谦和的微笑，颇有仙风道骨，正好和他的仙文
相配的说。 <br>  <br> 高爷爷其实还是开源运动的先驱。虽然他没有象Richard &nbsp;
Stallman那样八方奔走，但他捐献了好多作品，都可以在网上看到，比如著名的Mathematical &nbsp;
Writing，MMIXWare，The &nbsp; Tex &nbsp; Book等，更不用说足以让他流芳百世的Tex乐。 <br>  <br> Ken &nbsp;
Thompson，C语言前身B语言的作者，Unix的发明人之一(另一个是Dennis &nbsp; M. &nbsp;
Riche老大，被尊为DMR)，Belle(一个厉害的国际象棋程序)的作者之一, &nbsp; 操作系统Plan &nbsp; 9的主要作者(另一个是大牛人Rob
&nbsp; Pike, &nbsp;
前不久被google挖走了)。Ken爷爷也算是计算机历史上开天辟地的人物了。1969年还是计算机史前时代，普通人都认为只有大型机才能运行通用的操
作系统，小型机只有高山仰止的份儿。至于用高级语言来写操作系统，更是笑谈。Ken爷爷自然不是池中物，于是他和DMR怒了，在1969年到1970间用
汇编在PDP-7上写出了UNIX的第一个版本。他们并不知道，一场轰轰烈烈的UNIX传奇由此拉开了序幕。Ken爷爷在1971年又把Unix用C重
写，于是C在随后20年成就了不知多少豪杰的梦想和光荣。 <br>  <br> Ken爷爷还有段佳话： &nbsp;
装了UNIX的PDP-11最早被安装在Bell &nbsp; Lab里供大家日常使用。很快大家就发现Ken爷爷总能进入他们的帐户，获得最高权限。Bell
&nbsp;
Lab里的科学家都心比天高，当然被搞得郁闷无比。于是有高手怒了，跳出来分析了UNIX代码，找到后门，修改代码，然后重新编译了整个UNIX。就在大
家都以为&#8220;这个世界清净了&#8221;的时候，他们发现Ken爷爷还是轻而易举地拿到他们的帐户权限，百思不解后，只好继续郁闷。谁知道这一郁闷，就郁闷了14年，
直到Ken爷爷道出个中缘由。原来，代码里的确有后门，但后门不在Unix代码里，而在编译Unix代码的C编译器里。每次C编译器编译UNIX的代码，
就自动生成后门代码。而整个Bell &nbsp; Lab的人，都是用Ken爷爷的C编译器。:D<img src ="http://www.cppblog.com/agaric/aggbug/39310.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/agaric/" target="_blank">菌子</a> 2007-12-23 00:39 <a href="http://www.cppblog.com/agaric/archive/2007/12/23/39310.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学习步骤[zt]</title><link>http://www.cppblog.com/agaric/archive/2007/12/05/37887.html</link><dc:creator>菌子</dc:creator><author>菌子</author><pubDate>Wed, 05 Dec 2007 14:03:00 GMT</pubDate><guid>http://www.cppblog.com/agaric/archive/2007/12/05/37887.html</guid><wfw:comment>http://www.cppblog.com/agaric/comments/37887.html</wfw:comment><comments>http://www.cppblog.com/agaric/archive/2007/12/05/37887.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/agaric/comments/commentRss/37887.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/agaric/services/trackbacks/37887.html</trackback:ping><description><![CDATA[多新手学习嵌入式系统，不清楚那么多方向舵知识和参考书，该从哪里开始学习。入手了，却又在该先学习什么后学习什么上失去方向。这里有你想要的答案，帮你指点迷经。<br>
<div>
<p>这是我在<font face="文鼎ＰＬ简中楷, serif">ITjob</font>培训网上找到的课程大纲，觉得作为嵌入式系统开发的学习步骤，按部就班地去施行和学习，到不失为一种好的学习方法：）</p>
</div>
<div>
<p>就算是作为参考也是有很好的价值的！</p>
</div>
<p>
随着现代社会信息化进程的加快，嵌入式系统被广泛的地应用于军事、家用、工业、商业、办公、医疗等社会各个方
面，表现出很强的投资价值。从国际范围来看，作为数字化电子信息产品核心的嵌入式系统目前其硬件和软件开发工具市场已经突破<font face="文鼎ＰＬ简中楷, serif">2000</font>亿美元，嵌入式系统带
来的全球工业年产值更是达到了一万亿美元，随着全球经济的持续增长以及信息化的加速发展，嵌入式系统市场必将进一步增长。<font face="文鼎ＰＬ简中楷, serif"><br></font>本课程是为了适应目前发展迅速的嵌入式<font face="文鼎ＰＬ简中楷, serif">Linux</font>需求而设计，课程目标是让学员达到适应嵌入式应用软件开发、嵌入式系统开发或嵌入式驱动开发的基本素质。
课程循序渐进的带领您嵌入式开发的世界，采用了目前应用最广泛的软硬件开发平台（<font face="文鼎ＰＬ简中楷, serif">Linux</font>和<font face="文鼎ＰＬ简中楷, serif">Arm</font>），可以保证您尽量贴近目前企业需求。</p>
<div>
<p>学习步骤如下：（一步步来哦：）</p>
</div>
<p><font face="文鼎ＰＬ简中楷, serif"><br><span style="color: #0080ff;">1、Linux
</span></font><span style="color: #0080ff;">基础</span><font face="文鼎ＰＬ简中楷, serif"><br></font></p>
<p>安装<font face="文鼎ＰＬ简中楷, serif">Linux</font>操作系统
<font face="文鼎ＰＬ简中楷, serif"><br>Linux</font>文件系统
<font face="文鼎ＰＬ简中楷, serif"><br>Linux</font>常用命令
<font face="文鼎ＰＬ简中楷, serif"><br>Linux</font>启动过程详解
<font face="文鼎ＰＬ简中楷, serif"><br></font>熟悉<font face="文鼎ＰＬ简中楷, serif">Linux</font>服务
能够独立安装<font face="文鼎ＰＬ简中楷, serif">Linux</font>操作系统
<font face="文鼎ＰＬ简中楷, serif"><br></font>能够熟练使用<font face="文鼎ＰＬ简中楷, serif">Linux</font>系统的基本命令
<font face="文鼎ＰＬ简中楷, serif"><br></font>认识<font face="文鼎ＰＬ简中楷, serif">Linux</font>系统的常用服务
安装<font face="文鼎ＰＬ简中楷, serif">Linux</font>操作系统
<font face="文鼎ＰＬ简中楷, serif"><br>Linux</font>基本命令实践
<font face="文鼎ＰＬ简中楷, serif"><br></font>设置<font face="文鼎ＰＬ简中楷, serif">Linux</font>环境变量
<font face="文鼎ＰＬ简中楷, serif"><br></font>定制<font face="文鼎ＰＬ简中楷, serif">Linux</font>的服务
<font face="文鼎ＰＬ简中楷, serif">Shell </font>编程基础
使用<font face="文鼎ＰＬ简中楷, serif">vi</font>编辑文件
<font face="文鼎ＰＬ简中楷, serif"><br></font>使用<font face="文鼎ＰＬ简中楷, serif">Emacs</font>编辑文件
<font face="文鼎ＰＬ简中楷, serif"><br></font>使用其他编辑器
</p>
<p><br>
</p>
<p style="color: #0080ff;"><font face="文鼎ＰＬ简中楷, serif">2、Shell
</font>编程基础</p>
<p><font face="文鼎ＰＬ简中楷, serif">Shell</font>简介
<font face="文鼎ＰＬ简中楷, serif"><br></font>认识后台程序<font face="文鼎ＰＬ简中楷, serif"><br>Bash</font>编程
熟悉<font face="文鼎ＰＬ简中楷, serif">Linux</font>系统下的编辑环境
<font face="文鼎ＰＬ简中楷, serif"><br></font>熟悉<font face="文鼎ＰＬ简中楷, serif">Linux</font>下的各种<font face="文鼎ＰＬ简中楷, serif">Shell
<br></font>熟练进行<font face="文鼎ＰＬ简中楷, serif">shell</font>编程
熟悉<font face="文鼎ＰＬ简中楷, serif">vi</font>基本操作
<font face="文鼎ＰＬ简中楷, serif"><br></font>熟悉<font face="文鼎ＰＬ简中楷, serif">Emacs</font>的基本操作
<font face="文鼎ＰＬ简中楷, serif"><br></font>比较不同<font face="文鼎ＰＬ简中楷, serif">shell</font>的区别
<font face="文鼎ＰＬ简中楷, serif"><br></font>编写一个测试服务器是否连通的<font face="文鼎ＰＬ简中楷, serif">shell</font>脚本程序
<font face="文鼎ＰＬ简中楷, serif"><br></font>编写一个查看进程是否存在的<font face="文鼎ＰＬ简中楷, serif">shell</font>脚本程序
<font face="文鼎ＰＬ简中楷, serif"><br></font>编写一个带有循环语句的<font face="文鼎ＰＬ简中楷, serif">shell</font>脚本程序
</p>
<p><br>
</p>
<p style="color: #0080ff;"><font face="文鼎ＰＬ简中楷, serif">3、Linux
</font>下的 <font face="文鼎ＰＬ简中楷, serif">C </font>编程基础</p>
<p><font face="文鼎ＰＬ简中楷, serif">linux
C</font>语言环境概述 <font face="文鼎ＰＬ简中楷, serif"><br>Gcc</font>使用方法
<font face="文鼎ＰＬ简中楷, serif"><br>Gdb</font>调试技术
<font face="文鼎ＰＬ简中楷, serif"><br>Autoconf <br>Automake
<br>Makefile <br></font>代码优化 熟悉<font face="文鼎ＰＬ简中楷, serif">Linux</font>系统下的开发环境
<font face="文鼎ＰＬ简中楷, serif"><br></font>熟悉<font face="文鼎ＰＬ简中楷, serif">Gcc</font>编译器
<font face="文鼎ＰＬ简中楷, serif"><br></font>熟悉<font face="文鼎ＰＬ简中楷, serif">Makefile</font>规则
编写<font face="文鼎ＰＬ简中楷, serif">Hello,World</font>程序
<font face="文鼎ＰＬ简中楷, serif"><br></font>使用
<font face="文鼎ＰＬ简中楷, serif">make</font>命令编译程序
<font face="文鼎ＰＬ简中楷, serif"><br></font>编写带有一个循环的程序
<font face="文鼎ＰＬ简中楷, serif"><br></font>调试一个有问题的程序
</p>
<p><br>
</p>
<p><span style="color: #0080ff;">4、嵌入式系统开发基础</span>
</p>
<p>嵌入式系统概述 <font face="文鼎ＰＬ简中楷, serif"><br></font>交叉编译
<font face="文鼎ＰＬ简中楷, serif"><br></font>配置<font face="文鼎ＰＬ简中楷, serif">TFTP</font>服务
<font face="文鼎ＰＬ简中楷, serif"><br></font>配置<font face="文鼎ＰＬ简中楷, serif">NFS</font>服务
<font face="文鼎ＰＬ简中楷, serif"><br></font>下载<font face="文鼎ＰＬ简中楷, serif">Bootloader</font>和内核
<font face="文鼎ＰＬ简中楷, serif"><br></font>嵌入式<font face="文鼎ＰＬ简中楷, serif">Linux</font>应用软件开发流程<br>熟悉嵌入式系统概念以及开发流程 <font face="文鼎ＰＬ简中楷, serif"><br></font>建立嵌入式系统开发环境
制作<font face="文鼎ＰＬ简中楷, serif">cross_gcc</font>工具链
<font face="文鼎ＰＬ简中楷, serif"><br></font>编译并下载<font face="文鼎ＰＬ简中楷, serif">U-boot
<br></font>编译并下载<font face="文鼎ＰＬ简中楷, serif">Linux</font>内核
<font face="文鼎ＰＬ简中楷, serif"><br></font>编译并下载<font face="文鼎ＰＬ简中楷, serif">Linux</font>应用程序
</p>
<p><br>
</p>
<p><span style="color: #0080ff;">4、嵌入式系统移植</span>
</p>
<p><font face="文鼎ＰＬ简中楷, serif">Linux</font>内核代码
<font face="文鼎ＰＬ简中楷, serif"><br></font>平台相关代码分析
<font face="文鼎ＰＬ简中楷, serif"><br>ARM</font>平台介绍
<font face="文鼎ＰＬ简中楷, serif"><br></font>平台移植的关键技术
<font face="文鼎ＰＬ简中楷, serif"><br></font>移植<font face="文鼎ＰＬ简中楷, serif">Linux</font>内核到
<font face="文鼎ＰＬ简中楷, serif">ARM</font>平台 了解移植的概念
<font face="文鼎ＰＬ简中楷, serif"><br></font>能够移植<font face="文鼎ＰＬ简中楷, serif">Linux</font>内核
移植<font face="文鼎ＰＬ简中楷, serif">Linux2.6</font>内核到
<font face="文鼎ＰＬ简中楷, serif">ARM9</font>开发板
</p>
<p><br>
</p>
<p><span style="color: #0080ff;">5、嵌入式 </span><font style="color: #0080ff;" face="文鼎ＰＬ简中楷, serif">Linux
</font><span style="color: #0080ff;">下串口通信</span>
</p>
<p>串行<font face="文鼎ＰＬ简中楷, serif">I/O</font>的基本概念
<font face="文鼎ＰＬ简中楷, serif"><br></font>嵌入式<font face="文鼎ＰＬ简中楷, serif">Linux</font>应用软件开发流程
<font face="文鼎ＰＬ简中楷, serif"><br>Linux</font>系统的文件和设备
<font face="文鼎ＰＬ简中楷, serif"><br></font>与文件相关的系统调用
<font face="文鼎ＰＬ简中楷, serif"><br></font>配置超级终端和<font face="文鼎ＰＬ简中楷, serif">MiniCOM
</font>能够熟悉进行串口通信 <font face="文鼎ＰＬ简中楷, serif"><br></font>熟悉文件<font face="文鼎ＰＬ简中楷, serif">I/O
</font>编写串口通信程序 <font face="文鼎ＰＬ简中楷, serif"><br></font>编写多串口通信程序
</p>
<p><br>
</p>
<p><span style="color: #0080ff;">6、嵌入式系统中多进程程序设计</span>
</p>
<p><font face="文鼎ＰＬ简中楷, serif">Linux</font>系统进程概述
<font face="文鼎ＰＬ简中楷, serif"><br></font>嵌入式系统的进程特点
<font face="文鼎ＰＬ简中楷, serif"><br></font>进程操作
<font face="文鼎ＰＬ简中楷, serif"><br></font>守护进程
<font face="文鼎ＰＬ简中楷, serif"><br></font>相关的系统调用
了解<font face="文鼎ＰＬ简中楷, serif">Linux</font>系统中进程的概念
<font face="文鼎ＰＬ简中楷, serif"><br></font>能够编写多进程程序
编写多进程程序 <font face="文鼎ＰＬ简中楷, serif"><br></font>编写一个守护进程程序
<font face="文鼎ＰＬ简中楷, serif"><br>sleep</font>系统调用
任务管理、同步与通信 <font face="文鼎ＰＬ简中楷, serif">Linux</font>任务概述<font face="文鼎ＰＬ简中楷, serif"><br></font>任务调度
<font face="文鼎ＰＬ简中楷, serif"><br></font>管道 <font face="文鼎ＰＬ简中楷, serif"><br></font>信号
<font face="文鼎ＰＬ简中楷, serif"><br></font>共享内存
<font face="文鼎ＰＬ简中楷, serif"><br></font>任务管理 <font face="文鼎ＰＬ简中楷, serif">API
</font>了解<font face="文鼎ＰＬ简中楷, serif">Linux</font>系统任务管理机制
<font face="文鼎ＰＬ简中楷, serif"><br></font>熟悉进程间通信的几种方式
<font face="文鼎ＰＬ简中楷, serif"><br></font>熟悉嵌入式<font face="文鼎ＰＬ简中楷, serif">Linux</font>中的任务间同步与通信<br>编写一个简单的管道程序实现文件传输 <font face="文鼎ＰＬ简中楷, serif"><br></font>编写一个使用共享内存的程序
</p>
<p><br>
</p>
<p><span style="color: #0080ff;">7、嵌入式系统中多线程程序设计</span>
</p>
<p>线程的基础知识 <font face="文鼎ＰＬ简中楷, serif"><br></font>多线程编程方法
<font face="文鼎ＰＬ简中楷, serif"><br></font>线程应用中的同步问题
了解线程的概念 <font face="文鼎ＰＬ简中楷, serif"><br></font>能够编写简单的多线程程序
编写一个多线程程序
</p>
<p><br>
</p>
<p><span style="color: #0080ff;">8、嵌入式 </span><font style="color: #0080ff;" face="文鼎ＰＬ简中楷, serif">Linux
</font><span style="color: #0080ff;">网络编程</span>
</p>
<p>网络基础知识 <font face="文鼎ＰＬ简中楷, serif"><br></font>嵌入式<font face="文鼎ＰＬ简中楷, serif">Linux</font>中<font face="文鼎ＰＬ简中楷, serif">TCP/IP</font>网络结构
<font face="文鼎ＰＬ简中楷, serif"><br>socket </font>编程
<font face="文鼎ＰＬ简中楷, serif"><br></font>常用 <font face="文鼎ＰＬ简中楷, serif">API</font>函数
<font face="文鼎ＰＬ简中楷, serif"><br></font>分析<font face="文鼎ＰＬ简中楷, serif">Ping</font>命令的实现
<font face="文鼎ＰＬ简中楷, serif"><br></font>基本<font face="文鼎ＰＬ简中楷, serif">UDP</font>套接口编程
<font face="文鼎ＰＬ简中楷, serif"><br></font>许可证管理
<font face="文鼎ＰＬ简中楷, serif"><br>PPP</font>协议 <font face="文鼎ＰＬ简中楷, serif"><br>GPRS
</font>了解嵌入式<font face="文鼎ＰＬ简中楷, serif">Linux</font>网络体系结构
<font face="文鼎ＰＬ简中楷, serif"><br></font>能够进行嵌入式<font face="文鼎ＰＬ简中楷, serif">Linux</font>环境下的<font face="文鼎ＰＬ简中楷, serif">socket
</font>编程 <font face="文鼎ＰＬ简中楷, serif"><br></font>熟悉<font face="文鼎ＰＬ简中楷, serif">UDP</font>协议、<font face="文鼎ＰＬ简中楷, serif">PPP</font>协议
<font face="文鼎ＰＬ简中楷, serif"><br></font>熟悉<font face="文鼎ＰＬ简中楷, serif">GPRS
</font>使用<font face="文鼎ＰＬ简中楷, serif">socket </font>编写代理服务器
<font face="文鼎ＰＬ简中楷, serif"><br></font>使用<font face="文鼎ＰＬ简中楷, serif">socket
</font>编写路由器 <font face="文鼎ＰＬ简中楷, serif"><br></font>编写许可证服务器
<font face="文鼎ＰＬ简中楷, serif"><br></font>指出<font face="文鼎ＰＬ简中楷, serif">TCP</font>和<font face="文鼎ＰＬ简中楷, serif">UDP</font>的优缺点
<font face="文鼎ＰＬ简中楷, serif"><br></font>编写一个<font face="文鼎ＰＬ简中楷, serif">web</font>服务器
<font face="文鼎ＰＬ简中楷, serif"><br></font>编写一个运行在
<font face="文鼎ＰＬ简中楷, serif">ARM</font>平台的网络播放器
</p>
<p><br>
</p>
<p><font style="color: #0080ff;" face="文鼎ＰＬ简中楷, serif">9、GUI
</font><span style="color: #0080ff;">程序开发</span>
</p>
<p><font face="文鼎ＰＬ简中楷, serif">GUI</font>基础
<font face="文鼎ＰＬ简中楷, serif"><br></font>嵌入式系统<font face="文鼎ＰＬ简中楷, serif">GUI</font>类型
<font face="文鼎ＰＬ简中楷, serif"><br></font>编译<font face="文鼎ＰＬ简中楷, serif">QT
<br></font>进行<font face="文鼎ＰＬ简中楷, serif">QT</font>开发
熟悉嵌入式系统常用的<font face="文鼎ＰＬ简中楷, serif">GUI
<br></font>能够进行<font face="文鼎ＰＬ简中楷, serif">QT</font>编程
使用<font face="文鼎ＰＬ简中楷, serif">QT</font>编写&#8220;<font face="文鼎ＰＬ简中楷, serif">Hello</font>，<font face="文鼎ＰＬ简中楷, serif">World&#8221;</font>程序
<font face="文鼎ＰＬ简中楷, serif"><br></font>调试一个加入信号<font face="文鼎ＰＬ简中楷, serif">/</font>槽的实例
<font face="文鼎ＰＬ简中楷, serif"><br></font>通过重载<font face="文鼎ＰＬ简中楷, serif">QWidget
</font>类方法处理事件
</p>
<p><br>
</p>
<p><font style="color: #0080ff;" face="文鼎ＰＬ简中楷, serif">10、Linux
</font><span style="color: #0080ff;">字符设备驱动程序</span>
</p>
<p>设备驱动程序基础知识
<font face="文鼎ＰＬ简中楷, serif"><br>Linux</font>系统的模块
<font face="文鼎ＰＬ简中楷, serif"><br></font>字符设备驱动分析
<font face="文鼎ＰＬ简中楷, serif"><br>fs_operation</font>结构
<font face="文鼎ＰＬ简中楷, serif"><br></font>加载驱动程序
了解设备驱动程序的概念 <font face="文鼎ＰＬ简中楷, serif"><br></font>了解<font face="文鼎ＰＬ简中楷, serif">Linux</font>字符设备驱动程序结构
<font face="文鼎ＰＬ简中楷, serif"><br></font>能够编写字符设备驱动程序
编写<font face="文鼎ＰＬ简中楷, serif">Skull</font>驱动
<font face="文鼎ＰＬ简中楷, serif"><br></font>编写键盘驱动
<font face="文鼎ＰＬ简中楷, serif"><br></font>编写<font face="文鼎ＰＬ简中楷, serif">I/O</font>驱动
<font face="文鼎ＰＬ简中楷, serif"><br></font>分析一个看门狗驱动程序
<font face="文鼎ＰＬ简中楷, serif"><br></font>对比<font face="文鼎ＰＬ简中楷, serif">Linux2.6</font>内核与<font face="文鼎ＰＬ简中楷, serif">2.4</font>内核中字符设备驱动的不同<font face="文鼎ＰＬ简中楷, serif"><br>Linux </font>块设备驱动程序
块设备驱动程序工作原理 <font face="文鼎ＰＬ简中楷, serif"><br></font>典型的块设备驱动程序分析
<font face="文鼎ＰＬ简中楷, serif"><br></font>块设备的读写请求队列
了解<font face="文鼎ＰＬ简中楷, serif">Linux</font>块设备驱动程序结构
<font face="文鼎ＰＬ简中楷, serif"><br></font>能够编写简单的块设备驱动程序
比较字符设备与块设备的异同 <font face="文鼎ＰＬ简中楷, serif"><br></font>编写<font face="文鼎ＰＬ简中楷, serif">MMC</font>卡驱动程序
<font face="文鼎ＰＬ简中楷, serif"><br></font>分析一个文件系统
<font face="文鼎ＰＬ简中楷, serif"><br></font>对比<font face="文鼎ＰＬ简中楷, serif">Linux2.6</font>内核与<font face="文鼎ＰＬ简中楷, serif">2.4</font>内核中块设备驱动的不同
</p>
<p><br>
</p>
<p><span style="color: #0080ff;">11、文件系统</span>
</p>
<p>虚拟文件系统 <font face="文鼎ＰＬ简中楷, serif"><br></font>文件系统的建立
<font face="文鼎ＰＬ简中楷, serif"><br>ramfs</font>内存文件系统
<font face="文鼎ＰＬ简中楷, serif"><br>proc</font>文件系统
<font face="文鼎ＰＬ简中楷, serif"><br>devfs </font>文件系统
<font face="文鼎ＰＬ简中楷, serif"><br>MTD</font>技术简介
<font face="文鼎ＰＬ简中楷, serif"><br>MTD</font>块设备初始化
<font face="文鼎ＰＬ简中楷, serif"><br>MTD</font>块设备的读写操作
了解<font face="文鼎ＰＬ简中楷, serif">Linux</font>系统的文件系统
<font face="文鼎ＰＬ简中楷, serif"><br></font>了解嵌入式<font face="文鼎ＰＬ简中楷, serif">Linux</font>的文件系统
<font face="文鼎ＰＬ简中楷, serif"><br></font>了解<font face="文鼎ＰＬ简中楷, serif">MTD</font>技术
<font face="文鼎ＰＬ简中楷, serif"><br></font>能够编写简单的文件系统
为 <font face="文鼎ＰＬ简中楷, serif">ARM9</font>开发板添加
<font face="文鼎ＰＬ简中楷, serif">MTD</font>支持
<font face="文鼎ＰＬ简中楷, serif"><br></font>移植<font face="文鼎ＰＬ简中楷, serif">JFFS2</font>文件系统
<font face="文鼎ＰＬ简中楷, serif"><br></font>通过<font face="文鼎ＰＬ简中楷, serif">proc</font>文件系统修改操作系统参数
<font face="文鼎ＰＬ简中楷, serif"><br></font>分析<font face="文鼎ＰＬ简中楷, serif">romfs
</font>文件系统源代码 <font face="文鼎ＰＬ简中楷, serif"><br></font>创建一个<font face="文鼎ＰＬ简中楷, serif">cramfs
</font>文件系统
</p><img src ="http://www.cppblog.com/agaric/aggbug/37887.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/agaric/" target="_blank">菌子</a> 2007-12-05 22:03 <a href="http://www.cppblog.com/agaric/archive/2007/12/05/37887.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>又见理想</title><link>http://www.cppblog.com/agaric/archive/2007/12/04/37822.html</link><dc:creator>菌子</dc:creator><author>菌子</author><pubDate>Tue, 04 Dec 2007 14:45:00 GMT</pubDate><guid>http://www.cppblog.com/agaric/archive/2007/12/04/37822.html</guid><wfw:comment>http://www.cppblog.com/agaric/comments/37822.html</wfw:comment><comments>http://www.cppblog.com/agaric/archive/2007/12/04/37822.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/agaric/comments/commentRss/37822.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/agaric/services/trackbacks/37822.html</trackback:ping><description><![CDATA[<p>&nbsp;</p> <p>转眼间，从事程序员这一行已经两年半了。</p> <p>记得上中学的时候，刚接触了电脑，在体验了Windows得神奇以后，我就开始立志，希望将来能成为一个软件工程师。那时，在我的每本课本得第一页，除了会写上我自己的名字以外，还会有一行用钢笔写下的黑体字 “我的未来，我的Microsoft” 。 </p> <p>大学毕业以后进入一家普通的软件公司，浑浑噩噩得过着Coding &amp; Debug 的日子。不知道工作是为了谁，也不知道工作是为了什么，只知道我只是一个程序员。人没有目标和理想，就是行尸走肉，而我，就是这样一个臭皮囊，已经恍惚了这么多年。</p> <p>有一天，终于又重新打开求职的网页，又看到了那个从前在心目中无比神圣的Logo，那个永远的Microsoft。</p> <p>我终于明白了那时的梦想。其实我真正想要的，就是能够像Microsoft一样，能够被更多的人需要，能够对人们的生活有积极得影响，这才是我工作和人生的价值。 </p> <p>觉得为时已晚的时候,恰恰是最早的时候。</p> <p>还好，我还年轻。 </p> <p>我的未来，我的Microsoft。</p><img src ="http://www.cppblog.com/agaric/aggbug/37822.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/agaric/" target="_blank">菌子</a> 2007-12-04 22:45 <a href="http://www.cppblog.com/agaric/archive/2007/12/04/37822.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>几张图片向你讲明白男女之间的秘密</title><link>http://www.cppblog.com/agaric/archive/2007/08/18/30303.html</link><dc:creator>菌子</dc:creator><author>菌子</author><pubDate>Sat, 18 Aug 2007 04:51:00 GMT</pubDate><guid>http://www.cppblog.com/agaric/archive/2007/08/18/30303.html</guid><wfw:comment>http://www.cppblog.com/agaric/comments/30303.html</wfw:comment><comments>http://www.cppblog.com/agaric/archive/2007/08/18/30303.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/agaric/comments/commentRss/30303.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/agaric/services/trackbacks/30303.html</trackback:ping><description><![CDATA[<img onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0703/o7GjsQ==_FJjLoRc3DzjY.jpg');}" src="http://bbs.yesky.com/attachments/month_0703/o7GjsQ==_FJjLoRc3DzjY.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0>&nbsp;<br><br><br><br><img onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0703/o7Kjsg==_J50WwYfTuIlL.jpg');}" src="http://bbs.yesky.com/attachments/month_0703/o7Kjsg==_J50WwYfTuIlL.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0>&nbsp;<br><br><br><br><img onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0703/o7Ojsw==_uusT0F0pI42X.jpg');}" src="http://bbs.yesky.com/attachments/month_0703/o7Ojsw==_uusT0F0pI42X.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0>&nbsp;<br><br><br><br><img onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0703/o7SjtA==_DXLuzWCt3o2C.jpg');}" src="http://bbs.yesky.com/attachments/month_0703/o7SjtA==_DXLuzWCt3o2C.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0>&nbsp;<br><br><br><br><img onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0703/o7WjtQ==_Ry4W54rJTbhB.jpg');}" src="http://bbs.yesky.com/attachments/month_0703/o7WjtQ==_Ry4W54rJTbhB.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0>&nbsp;<br><br><br><br><img onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0703/o7ajtg==_XO4MOGI92dky.jpg');}" src="http://bbs.yesky.com/attachments/month_0703/o7ajtg==_XO4MOGI92dky.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0>&nbsp;<br><br><br><br><img onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0703/o7ejtw==_XXyJbp01o06w.jpg');}" src="http://bbs.yesky.com/attachments/month_0703/o7ejtw==_XXyJbp01o06w.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0>&nbsp;<br><br><br><br><img onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0703/o7ijuA==_h7I4A5F4UPpq.jpg');}" src="http://bbs.yesky.com/attachments/month_0703/o7ijuA==_h7I4A5F4UPpq.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0>&nbsp;<br><br><br><br><img onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0703/o7mjuQ==_7ICI9MvJS2a6.jpg');}" src="http://bbs.yesky.com/attachments/month_0703/o7mjuQ==_7ICI9MvJS2a6.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0>&nbsp;<br><br><br><br><img onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0703/o7GjsaOw_5CljXMe8k0st.jpg');}" src="http://bbs.yesky.com/attachments/month_0703/o7GjsaOw_5CljXMe8k0st.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0>&nbsp;<br><br><br><br><img onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0703/o7GjsaOx_hzJ0XYYJQAO1.jpg');}" src="http://bbs.yesky.com/attachments/month_0703/o7GjsaOx_hzJ0XYYJQAO1.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0>&nbsp;<br><br><br><br><img onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0703/o7GjsaOy_KQkjKZYJ8W82.jpg');}" src="http://bbs.yesky.com/attachments/month_0703/o7GjsaOy_KQkjKZYJ8W82.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0>&nbsp;<br><br><br><br><img onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0703/o7GjsaOz_eVAlEFrLCY1Q.jpg');}" src="http://bbs.yesky.com/attachments/month_0703/o7GjsaOz_eVAlEFrLCY1Q.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0>&nbsp;<br><br><br><br><img onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0703/o7GjsaO0_iS25f55hCZDe.jpg');}" src="http://bbs.yesky.com/attachments/month_0703/o7GjsaO0_iS25f55hCZDe.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0>&nbsp;<br><br><br><br><img onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0703/o7GjsaO1_xI529le1LZA0.jpg');}" src="http://bbs.yesky.com/attachments/month_0703/o7GjsaO1_xI529le1LZA0.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0>&nbsp;<br><br><br><br><img onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0703/o7GjsaO2_ue41fGY2dC0L.jpg');}" src="http://bbs.yesky.com/attachments/month_0703/o7GjsaO2_ue41fGY2dC0L.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0>&nbsp;<br><br><br><br><img onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0703/o7GjsaO3_HGJTRlQneRft.jpg');}" src="http://bbs.yesky.com/attachments/month_0703/o7GjsaO3_HGJTRlQneRft.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0>&nbsp;<br><br><br><br><img onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0703/o7GjsaO4_CaJ3e9SGqLBJ.jpg');}" src="http://bbs.yesky.com/attachments/month_0703/o7GjsaO4_CaJ3e9SGqLBJ.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0>&nbsp;<br><br><br><br><img onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0703/o7GjsaO5_UjYH31qV68Fg.jpg');}" src="http://bbs.yesky.com/attachments/month_0703/o7GjsaO5_UjYH31qV68Fg.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0>&nbsp;<br><br><br><br><img onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0703/o7GjsqOw_k5iXDl5FlokP.jpg');}" src="http://bbs.yesky.com/attachments/month_0703/o7GjsqOw_k5iXDl5FlokP.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0>&nbsp;<br><br><br><br><img onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0703/o7GjsqOx_ZKmWC9lanhWG.jpg');}" src="http://bbs.yesky.com/attachments/month_0703/o7GjsqOx_ZKmWC9lanhWG.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0>&nbsp;<br><br><br><br><img onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0703/o7GjsqOy_vQwtXgBz9M00.jpg');}" src="http://bbs.yesky.com/attachments/month_0703/o7GjsqOy_vQwtXgBz9M00.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0>&nbsp;<br><br><br><br><img onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0703/o7GjsqOz_JCH0s289fXgU.jpg');}" src="http://bbs.yesky.com/attachments/month_0703/o7GjsqOz_JCH0s289fXgU.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0>&nbsp;<br><br><br><br><img onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0703/o7GjsqO0_yqsA5kJpiqeT.jpg');}" src="http://bbs.yesky.com/attachments/month_0703/o7GjsqO0_yqsA5kJpiqeT.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0>&nbsp;<br><br><br><br><img onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0703/o7GjsqO1_hAU1Lenj2ILe.jpg');}" src="http://bbs.yesky.com/attachments/month_0703/o7GjsqO1_hAU1Lenj2ILe.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0>&nbsp;<br><br><br><br><img onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0703/o7GjsqO2_cV5m18hLi5KM.jpg');}" src="http://bbs.yesky.com/attachments/month_0703/o7GjsqO2_cV5m18hLi5KM.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0>&nbsp;<br><br><br><br><img onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0703/o7GjsqO3_XJBsiCbHbv72.jpg');}" src="http://bbs.yesky.com/attachments/month_0703/o7GjsqO3_XJBsiCbHbv72.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0>&nbsp;<br><br><br><br><img onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0703/o7GjsqO4_1zOfYNTrOESV.jpg');}" src="http://bbs.yesky.com/attachments/month_0703/o7GjsqO4_1zOfYNTrOESV.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0>&nbsp;<br><br><br><br><img onmousewheel="return imgzoom(this);" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(!this.resized) {return false;} else {window.open('attachments/month_0703/o7GjsqO5_MKxg9cZhiIhy.jpg');}" src="http://bbs.yesky.com/attachments/month_0703/o7GjsqO5_MKxg9cZhiIhy.jpg" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='点击在新窗口查看全图\nCTRL+鼠标滚轮放大或缩小';}" border=0>&nbsp;<br><br>
<img src ="http://www.cppblog.com/agaric/aggbug/30303.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/agaric/" target="_blank">菌子</a> 2007-08-18 12:51 <a href="http://www.cppblog.com/agaric/archive/2007/08/18/30303.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>