• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            星光燦爛

            C元素

            2008年4月17日

              1 int __init s3c_fb_probe(struct platform_device *pdev)
              2 {
              3     char driver_name[]="s3c_fb";
              4     int ret;
              5     int index=0;
              6 
              7     for(index=0; index<S3C_FB_NUM; index++){                   //遍歷每一個fb,我們里只有一個lcd.
              8         s3c_fb_init_fbinfo(&info[index], driver_name, index);
              9 
             10         if(index==0){                                          //操作主lcd
             11             s3c_fb_backlight_power(1);                         //開啟背光,lcd電源源,開啟背光等。           
             12             s3c_fb_lcd_power(1);
             13             s3c_fb_backlight_level(DEFAULT_BACKLIGHT_LEVEL);
             14 
             15             dprintk("dev FB init\n");
             16 
             17             //映射內(nèi)存區(qū)域
             18             if (!request_mem_region((unsigned long)S3C_VA_LCD, SZ_1M, "s3c-lcd")) {
             19                 ret = -EBUSY;
             20                 goto dealloc_fb;
             21             }
             22 
             23             dprintk("got LCD region\n");
             24 
             25             //打開lcd_clock
             26             lcd_clock = clk_get(NULL, "lcd");
             27             if (!lcd_clock) {
             28                 printk(KERN_INFO "failed to get lcd clock source\n");
             29                 ret =  -ENOENT;
             30                 goto release_irq;
             31             }
             32 
             33             clk_enable(lcd_clock);
             34             printk("S3C_LCD clock got enabled :: %ld.%03ld Mhz\n", print_mhz(clk_get_rate(lcd_clock)));
             35 
             36             msleep(5);
             37         }
             38 
             39         //申請顯存
             40         /* Initialize video memory */
             41         ret = s3c_fb_map_video_memory(&info[index]);
             42         if (ret) {
             43             printk("Failed to allocate video RAM: %d\n", ret);
             44             ret = -ENOMEM;
             45             goto release_clock;
             46         }
             47         dprintk("got video memory\n");
             48 
             49         //初始化寄存器,這里與具體的設(shè)備有關(guān)。
             50         ret = s3c_fb_init_registers(&info[index]);
             51         ret = s3c_fb_check_var(&info[index].fb.var, &info[index].fb);
             52 
             53         //所謂的色表(調(diào)色盤?),不清除是干啥的。
             54         if(index<2){
             55             /* 2007-01-09-Tue. for RGB 8-8-8 palette*/
             56             if(fb_alloc_cmap(&info[index].fb.cmap, 2560)<0){
             57                 goto dealloc_fb;
             58             }
             59         }
             60         else{
             61             /* 2007-01-09-Tue. for RGB 8-8-8 palette*/
             62             if(fb_alloc_cmap(&info[index].fb.cmap, 160)<0){
             63                 goto dealloc_fb;
             64             }
             65         }
             66         //注冊framebuffer??
             67         ret = register_framebuffer(&info[index].fb);
             68         if (ret < 0) {
             69             printk(KERN_ERR "Failed to register framebuffer device: %d\n", ret);
             70             goto free_video_memory;
             71         }
             72     }//     for(index=0; index<CONFIG_FB_NUM; index++)
             73 
             74     //    initialize the struct for Waitforvsync
             75     // 關(guān)于中斷的初始化工作,貌似2412是注冊以后又取消了
             76     s3cfb_vSyncInfo.count = 0;
             77     init_waitqueue_head(&s3cfb_vSyncInfo.waitQueue);
             78 
             79 #if defined(CONFIG_ARCH_S3C2443)
             80     ret = request_irq(IRQ_LCD3, s3c_fb_irq, 0"s3c-lcd", pdev);
             81 #elif defined(CONFIG_ARCH_S3C6400)
             82     ret = request_irq(IRQ_LCD_VSYNC, s3c_fb_irq, 0"s3c-lcd", pdev);
             83 #elif defined (CONFIG_S3C_DVS) && defined (CONFIG_ARCH_S3C2412)
             84     ret = request_irq(IRQ_LCD, s3c_dvs_irq, 0"s3c-lcd", pdev);
             85 #endif
             86     if (ret != 0) {
             87         printk("Failed to install irq (%d)\n", ret);
             88         goto release_irq;
             89     }
             90 
             91 #if defined (CONFIG_S3C_DVS) & defined (CONFIG_ARCH_S3C2412)
             92     disable_irq(IRQ_LCD);
             93 #endif
             94 
             95     //在sys底下建立節(jié)點,用于和用戶空間交互
             96     /* create device files */
             97     device_create_file(&(pdev->dev), &dev_attr_backlight_power);
             98     device_create_file(&(pdev->dev), &dev_attr_backlight_level);
             99     device_create_file(&(pdev->dev), &dev_attr_lcd_power);
            100 
            101     //勝利退出
            102     printk(KERN_INFO "fb%d: %s frame buffer device\n",
            103         info[index].fb.node, info[index].fb.fix.id);
            104     return 0;
            105 
            106 free_video_memory:
            107     s3c_fb_unmap_video_memory(&info[index]);
            108 
            109 release_clock:
            110     clk_disable(lcd_clock);
            111     clk_put(lcd_clock);
            112 
            113 release_irq:
            114 #if defined(CONFIG_ARCH_S3C2443)
            115     free_irq(IRQ_LCD3, &info);
            116 #elif defined(CONFIG_ARCH_S3C6400)
            117     free_irq(IRQ_LCD_VSYNC, &info);
            118 #endif
            119     //release_mem:
            120     release_mem_region((unsigned long)S3C_VA_LCD, S3C_SZ_LCD);
            121 
            122 dealloc_fb:
            123     framebuffer_release(&info[index].fb);
            124     return ret;
            125 }
            126 
            127 
            128 

            posted @ 2008-04-17 12:52 菌子 閱讀(912) | 評論 (0)編輯 收藏

            2008年3月6日

             

            第二章 從內(nèi)核出發(fā)

             

            內(nèi)核開發(fā)特點:

            1. 沒有l(wèi)ibc庫。 kernel是一個不依賴任何庫的,包括標準C函數(shù)庫。kernel中使用的一些常見函數(shù),比如memset, strcpy都是在kernel代碼中自己實現(xiàn)的。
            2. 請使用gcc來編譯內(nèi)核,因為內(nèi)核中的代碼并不完全符合ANSI C的標準。
            3. 沒有內(nèi)存保護,非法的內(nèi)存操作可能會使系統(tǒng)掛起。
            4. 不要使用浮點數(shù)
            5. 內(nèi)核棧容量很小( 2 * 頁面大小 )
            6. linux是搶占多任務(wù)操作系統(tǒng),進程,內(nèi)核都可以搶占,而且支持多處理器,所以內(nèi)核代碼需要考慮并發(fā)和同步的問題。
            7. 盡量要兼容所有架構(gòu)(arch),良好的移植性

             

             

             

            第三章 進程管理

             

            內(nèi)存描述符及任務(wù)結(jié)構(gòu)

            1. 每個進程都對應(yīng)有一個進程描述符,即task_struct結(jié)構(gòu),用來記錄這個進程的所有信息:打開的文件,地址空間,進程狀態(tài)……
            2. linux通過slab(個人感覺類似于pool)分配task_struct。 進程的task_struct指針存放在位于內(nèi)核棧底的一個叫做thread_info的結(jié)構(gòu)里面。
            3. 內(nèi)核通過PID來標識進程,默認設(shè)置最大值,即默認系統(tǒng)最大進程數(shù)為32768。內(nèi)核中一般通過current宏來獲的當前進程的task_struct,不同的體系架構(gòu)下,實現(xiàn)方法可能會不同。
            4. 進程狀態(tài),可以通過set_task_state來設(shè)置
              1. TASK_RUNNING 進程可執(zhí)行;它正在運行,或者是在任務(wù)隊列中等待被運行。
              2. TASK_INTERRUPTIBLE 進程可中斷;進程被阻塞,但是可以通過信號,或者其他方法喚醒。
              3. TASK_UNINTERRUPTIBLE 進程不可中斷;進程被阻塞,而且不受任何干擾,不會響應(yīng)信號而被喚醒。
              4. TASK_ZOMBIE 進程僵死;進程已經(jīng)運行完畢,但是父進程沒有調(diào)用wait4系統(tǒng)調(diào)用,此時子進程的task_struct保留,等待父進程查詢相關(guān)信息。【Agaric:相似的,在windows上,進程的HANDLE通過(CreateProcess或者OpenProcess得到) 在程序運行完畢后,在CloseHandle 前,也是仍然有效,用于查詢進程相關(guān)信息,比如Exit code 等等】
              5. TASK_STOPPED 進程停止;
            5. 進程上下文: 進程通過系統(tǒng)調(diào)用或者異常陷入內(nèi)核,此時內(nèi)核是"代表進程"在工作,這個工作環(huán)境,叫做進程上下文,內(nèi)核程序可以通過宏來獲的當前進程的task_struct
            6. 進程家族樹: 除了init,每個進程都有父進程, 每個進程都可能有子進程及兄弟進程。

            (待續(xù))

            posted @ 2008-03-06 00:00 菌子 閱讀(1784) | 評論 (7)編輯 收藏

            2008年3月1日


            配置svnserver

            可以直接在YaST2里面,在xinetd設(shè)置里面,添加svnserve的選項。
            但是要注意運行使用的用戶,默認的svn:svn是沒有被建立的, 我改成nobody以后就ok了,但不知道有什么什么問題。


            配置APACHE

            采用svnserver的方法有許多不便,所以我還是決定最終采用http的方法。
            OpenSuse的apache2的配置文件布局似乎和其他系統(tǒng)有點不一樣。 它在httpd.conf里面并沒有直接進行的配置,而是包含了其他很多的conf文件,其中的每一個conf,包含了某一個具體部分的配置。

            ls /etc/apache2/

            charset.conv         httpd.conf   mod_autoindex-defaults.conf  mod_status.conf     ssl.crl          ssl.key      vhosts.d
            conf.d               listen.conf  mod_info.conf                mod_userdir.conf    ssl.crt          ssl.prm
            default-server.conf  magic        mod_log_config.conf          mod_usertrack.conf  ssl.csr          sysconfig.d
            errors.conf          mime.types   mod_mime-defaults.conf       server-tuning.conf  ssl-global.conf  uid.conf

            配置svn 使用 apache 的文章很多,我就不重復具體的配置方法了,只是說明一下在suse10.3上具體需要修改的文件。
            /etc/apache2/conf.d/subversion.conf    這個文件被httpd.conf所包含,用來修改svn目錄及一些設(shè)置,一般教程里面都是修改httpd.conf.
            /etc/apache2/sysconfig.d/loadmodule.conf 用來在apache啟動時加載模塊用。

            我最終解決mod_dav_svn加載的方法是,在/usr/lib/apache2-prefork/ 下建立一個 mod_dav_svn.so的鏈接(位于 /usr/lib/apache2)這樣在YaST的httpserver設(shè)定里面就可以選擇和加載這個模塊了。 就是這個問題,花了我好幾個消失來解決。

            其他的配置方法,可以參考svn中文手冊,和網(wǎng)上其他的配置教程。
             







                


            posted @ 2008-03-01 17:08 菌子 閱讀(687) | 評論 (0)編輯 收藏

            2008年2月2日

            http://blog.chinaunix.net/u1/34474/showart_404278.html

            http://blog.chinaunix.net/u1/41638/showart_438078.html

            http://blog.csdn.net/fudan_abc/

            posted @ 2008-02-02 23:41 菌子 閱讀(224) | 評論 (0)編輯 收藏

            2008年1月28日

             

            我使用的不是SMDK2412的開發(fā)板,而是公司已經(jīng)出貨的2412的機器,原來用的是自己的一個OS,現(xiàn)在打算在他上面運行l(wèi)inux.

            編譯2.6的內(nèi)核,需要比較新的gcc, 我暫時能找到的新版arm-linux-gcc也就是3.4.1。,之前用arm-none-linux-eabi-gcc 4.1編出來的zImage好大,基本不能用。對于開發(fā)工具和內(nèi)核版本,我覺得還是越新越好(穩(wěn)定版),否則可能會遇到一些稀奇古怪的問題。

            1.修改Boot

            使用公司原有的Boot, 在Boot啟動Kernel的時候,加入的參數(shù)設(shè)定,然后用公司專用的usb更新工具燒錄kernel到flash中,啟動機器以后顯示了一堆亂碼,在啟動參數(shù) console=ttySAC0后面加上了,115200,設(shè)定波特率以后一切OK.

            2.MTD分區(qū):修改文件common-smdk.c , 修改其中的MTD設(shè)備的分區(qū)。

            新的kernel里面已經(jīng)有了默認分區(qū)表,我們只要根據(jù)我們需要來做部分修改就可以,我的nand有512MB, 我目前只是將前面的2M分給boot,kernel, 緊接下來的4M分給rootfs,打算暫時加載一個 簡單的cramfs。其他的nand都還沒有用。

            3.取消NAND驅(qū)動中的ECC讀校驗,以及壞塊監(jiān)測部分, 因為NAND操作部分,boot和kernel有一些不同。

            重啟以后,mount root分區(qū)失敗,還打出了I/O 錯誤。 關(guān)閉了ECC校驗,修改了pc工具的燒錄地址以后,ok. 這都是因為我們的燒錄工具使用的地址表示方法和ecc的方式有一些不同。

            4.燒錄 root 文件系統(tǒng)。

            拿了一個在kernel2.4 2440 上用過得cramfs直接來用,提示找不到dev/console, 上網(wǎng)查了一遍,應(yīng)該是因為現(xiàn)在新版的kernel去掉了devfs的緣故,為了先快速的有一個可執(zhí)行環(huán)境,所以在網(wǎng)上找了一個現(xiàn)成的,已經(jīng)自己建立好節(jié)點的cramfs,里面的busybox版本也比較新。

             

            開機運行,總算見到了親愛的shell.

            posted @ 2008-01-28 23:30 菌子 閱讀(1161) | 評論 (2)編輯 收藏

            2008年1月14日

            工作需要,加之好奇心,終于給自己家的PC里面也安裝上了Linux。 為了和公司的OpenSuse有所不同于是就選擇另一款大名頂頂?shù)陌l(fā)行版Fedora.

            我一直認為,人生總是要遇到一些挫折的。 可不就是裝個系統(tǒng)嘛,為啥就要這樣難為我捏?

            懶得插上光驅(qū),于是就用硬盤安裝的辦法。 可grub for dos 就是不認我從ISO里解出來的vmlinuz, 汗,放狗去搜,貌似沒有人遇到過這個情況。不能就這樣放棄吧?再看看解壓出來的一個jpg,居然也打不開,nnd是不是文件解錯了。 之前我解文件用的是winrar, 換成 Deamon Tools 試試, NND 這次那附圖OK了。 再用grub來load , OK! 額。。 原來winrar在解iso的時候會掉鏈子, 伙計們以后要千萬小心。

            以后的事就順利多了。  裝顯卡驅(qū)動,直接用yum的包就可以啦,不過裝完以后需要修改grub的list,因為內(nèi)核也更新了,需要從新的內(nèi)核啟動,顯卡驅(qū)動才可以奏效。Fedora默認已經(jīng)安裝了桌面特效,顯卡驅(qū)動安裝完以后,直接在菜單里面選擇打開特效就OK. 嘿嘿,效果還可以吧。

             


            接下來就是解決QQ滴問題了。 開始用Pigin,只能聊天,而且只能看見在線的好友,勉強能用,后來又裝了wine上面的qq2007,應(yīng)該是配置的問題,總是crash。 不過最后發(fā)現(xiàn)了lumaQQ和eva這兩個好東東。 我本人還是比較喜歡eva的,功能很全了,界面也很友好,只可惜這個家伙不能像其他的一些KDE程序在gnome下也能正常運行,只能在KDE下玩兒。LumaQQ作者現(xiàn)在主要在維護iphone版本的, 普通的java版有一段時間沒更新了, 現(xiàn)在還能常用, 界面也還好。

            這幾天綜合下來,感覺Fedora還算不錯,但是易用性上面,不如Opensuse。 至于 ubuntu , 我用的不多, 感覺優(yōu)點是國內(nèi)源多,所以更新和下載程序速度比較快。

            工作的任務(wù)是一直Linux內(nèi)核,現(xiàn)在看來,還有很多東西要學,很多路要走。

            我覺得對于這樣比較長期/艱巨的任務(wù),相我這樣工作經(jīng)驗不豐富的人,很難針對它來指定一個計劃, 其實就是很難將其分割成一步步來完成的小計劃。導致每天都暈暈呼呼的不知道干什么好。 希望有經(jīng)驗的朋友能給點建議。


            Winrar解ISO可能會掉鏈子

            對Linux有興趣的初學者,不妨親身在機器上安裝一個易用的發(fā)行版(非虛擬機, 推薦Ubuntu, Opensuse10.3(KDE))
            posted @ 2008-01-14 23:50 菌子 閱讀(984) | 評論 (2)編輯 收藏

            2007年12月23日

            MIT   BBS上說微軟電話面試的一道題就是“Who   do   you   think   is   the   best   coder,   and   why?”。我覺得挺有意思的,也來湊個熱鬧。排名不分先后。

            Bill   Joy,   前任Sun的首席科學家,當年在Berkeley時主持開發(fā)了最早版本的BSD。他還是vi和csh的作者。當然,Csh   Programming   Considered   Harmful   是另一個話題樂。據(jù)說他想看看自己能不能寫個操作系統(tǒng),就在三天里寫了個自己的Unix,     也就是BSD的前身。當然是傳說了,但足見他的功力。另一個傳說是,1980年初的時候,DARPA讓BBN在Berkley   Unix里加上BBN開發(fā)的TCP/IP代碼。但當時還是研究生的B伯伯怒了,拒絕把BBN   TCP/IP加入BSD,因為他覺得BBN的TCP/IP寫得不好。于是B伯伯出手了,端的是一箭封喉,很快就寫出了高性能的伯克利版TCP/IP。當時   BBN和DARPA簽了巨額合同開發(fā)TCP/IP   Stack,誰知他們的代碼還不如一個研究生的好。于是他們開會。只見當時B伯伯穿個T-shirt出現(xiàn)在會議室(當時穿T-shirt不象現(xiàn)在,還是相 當散漫的哈)。只見BBN問:你怎么寫出來的?而B伯伯答:簡單,你讀協(xié)議,然后編程就行了。最令偶暈倒的是,B伯伯碩士畢業(yè)后決定到工業(yè)界發(fā)展,于是就 到了當時只有一間辦公室的Sun,   然后他就把Sparc設(shè)計出來樂。。。象這種軟硬通吃的牛人,想不佩服都不行的說。據(jù)Bill   Joy的同事說,一般開會的時候B伯伯總是拿一堆雜志漫不經(jīng)心地讀。但往往在關(guān)鍵之處,B伯伯發(fā)言,直切要害,提出漂亮的構(gòu)想,讓同事們徹底崩潰。對了, 他還是Java   Spec和JINI的主要作者之一。


            John   Carmack,ID   Software的founder和Lead   Programmer。上個月和一個搞圖形的師兄聊天,他竟然不知道John   Carmack,   也讓偶大大地暈了一把。不過也許搞研究的和搞實戰(zhàn)的多少有些隔吧。想必喜歡第一人稱射擊游戲的都知道J哥哥。90年代初只要能在PC上搞個小動畫都能讓人 驚嘆一番的時候,J哥哥就推出了石破天驚的Castle   Wolfstein,   然后再接再勵,doom,   doomII,   Quake...每次都把3-D技術(shù)推到極
            限。J哥哥的簡歷上說自己的專長是"Exhaust   3-D   technology",真是牛人之言不我欺的說。做J哥哥這樣的人是很幸福的,因為各大圖形卡廠家一有了新產(chǎn)品就要向他“進貢”   ,不然如果他的游戲不支持哪種卡,哪種卡基本就會夭折樂。當初MS的Direct3D也得聽取他的意見,修改了不少API。當然,J哥哥在結(jié)婚前十數(shù)年如 一日地每天編程14小時以上,也是偶們凡人望塵莫及的。對了,J哥哥高中肆業(yè)(?),可以說是自學成才。不過呢,誰要用這個例子來為自己學習不好辯護,就 大錯特錯了。那   Leonardo   Da   Vinci還是自學成才呢(人是私生子,不能上學)。普通人和天才還是有區(qū)別的。對了,其實偶們叫“達分奇”是相當不對的,因為Vinci是地名,而Da   Vinci就是從Vinci來的人的意思。換句話說,Leonardo   Da   Vinci就是“從Vinci來的Leonardo”的意思。叫別人“Da   Vinci”就不知所謂樂。嗯,扯遠了,打住。

            David   Cutler,VMS和Windows   NT的首席設(shè)計師,去微軟前號稱硅谷最牛的kernel開發(fā)員。當初他和他的手下在微軟一周內(nèi)把一個具備基本功能的bootable   kernel寫出來,然后說:“who   can't   write   an   OS   in   a   week?",也是牛氣沖天的說。順便說一句,D爺爺?shù)絅T3.5時,管理1500名開發(fā)員,自己還兼做設(shè)計和編程,不改coder本色啊。

            D爺爺天生脾氣火爆,和人爭論時喜歡雙手猛擊桌子以壯聲勢。:-)   日常交談F-word不離口。他面試秘書時必問:"what   do   you   think   of   the   word   'fuk'?"   ,讓無數(shù)美女剎羽而歸。終于有一天,一個同樣火爆的女面對這個問題脫口而出:"That's   my   favorite   word"。于是她被錄取樂,為D爺爺工作到NT3.5發(fā)布。

            Don   Knuth。高爺爺其實用不著偶多說。學編程的不知道他就好像學物理的不知道牛頓,學數(shù)學的不知道歐拉,學音樂的不知道莫扎特,學Delphi的不知到   Anders   Hejlsberg,或者學Linux不知道Linus   Torvalds一樣,不可原諒啊。:-)為了讓文章完整,就再羅唆幾句吧。高爺爺本科時就開始給行行色色的公司寫各種稀奇古怪的編譯器掙外快了。他賣給 別人時收一兩千美元,那些公司拿了code,加工一下賣出去就是上萬上十萬。不過也沒見高爺爺不爽過,學者本色的說。想想那可是60年代初啊,高爺爺寫編 譯器寫多了,順帶就搞出了個Attribute   Grammar和LR(k),大大地造福后人啊。至于高爺爺在CalTech的編程比賽(有Alan   Kay得眾多高高手參加)總是第一,寫的Tex到86年就code   freeze,還附帶2^n美分獎勵等等都是耳熟能詳?shù)模季筒火埳鄻贰?

            順便說一下,高老大爺是無可爭議的寫作高手。他給Concrete   Mathematics   寫的前言可謂字字鏗鏘,堪為前言的典范。他的技術(shù)文章也是一絕,文風細致,解釋精當,而且沒有學究氣,不失輕快跳脫。記得幾年前讀Concrete   Mathemathics,時不時開懷大笑,讓老媽極其郁悶,覺得我nerdy到家,不可救藥。其實呢,子非魚,安知魚之樂,更不知那完全是高爺爺?shù)墓? 勞。說到寫作高手,不能不提Stephen   A.   Cook。他的文章當年就被我們的寫作老師極力推薦,號稱典雅文風的樣本。庫爺爺一頭銀發(fā),身材頎長,總是面帶謙和的微笑,頗有仙風道骨,正好和他的仙文 相配的說。

            高爺爺其實還是開源運動的先驅(qū)。雖然他沒有象Richard   Stallman那樣八方奔走,但他捐獻了好多作品,都可以在網(wǎng)上看到,比如著名的Mathematical   Writing,MMIXWare,The   Tex   Book等,更不用說足以讓他流芳百世的Tex樂。

            Ken   Thompson,C語言前身B語言的作者,Unix的發(fā)明人之一(另一個是Dennis   M.   Riche老大,被尊為DMR),Belle(一個厲害的國際象棋程序)的作者之一,   操作系統(tǒng)Plan   9的主要作者(另一個是大牛人Rob   Pike,   前不久被google挖走了)。Ken爺爺也算是計算機歷史上開天辟地的人物了。1969年還是計算機史前時代,普通人都認為只有大型機才能運行通用的操 作系統(tǒng),小型機只有高山仰止的份兒。至于用高級語言來寫操作系統(tǒng),更是笑談。Ken爺爺自然不是池中物,于是他和DMR怒了,在1969年到1970間用 匯編在PDP-7上寫出了UNIX的第一個版本。他們并不知道,一場轟轟烈烈的UNIX傳奇由此拉開了序幕。Ken爺爺在1971年又把Unix用C重 寫,于是C在隨后20年成就了不知多少豪杰的夢想和光榮。

            Ken爺爺還有段佳話:   裝了UNIX的PDP-11最早被安裝在Bell   Lab里供大家日常使用。很快大家就發(fā)現(xiàn)Ken爺爺總能進入他們的帳戶,獲得最高權(quán)限。Bell   Lab里的科學家都心比天高,當然被搞得郁悶無比。于是有高手怒了,跳出來分析了UNIX代碼,找到后門,修改代碼,然后重新編譯了整個UNIX。就在大 家都以為“這個世界清凈了”的時候,他們發(fā)現(xiàn)Ken爺爺還是輕而易舉地拿到他們的帳戶權(quán)限,百思不解后,只好繼續(xù)郁悶。誰知道這一郁悶,就郁悶了14年, 直到Ken爺爺?shù)莱鰝€中緣由。原來,代碼里的確有后門,但后門不在Unix代碼里,而在編譯Unix代碼的C編譯器里。每次C編譯器編譯UNIX的代碼, 就自動生成后門代碼。而整個Bell   Lab的人,都是用Ken爺爺?shù)腃編譯器。:D
            posted @ 2007-12-23 00:39 菌子 閱讀(416) | 評論 (0)編輯 收藏

            2007年12月5日

            多新手學習嵌入式系統(tǒng),不清楚那么多方向舵知識和參考書,該從哪里開始學習。入手了,卻又在該先學習什么后學習什么上失去方向。這里有你想要的答案,幫你指點迷經(jīng)。

            這是我在ITjob培訓網(wǎng)上找到的課程大綱,覺得作為嵌入式系統(tǒng)開發(fā)的學習步驟,按部就班地去施行和學習,到不失為一種好的學習方法:)

            就算是作為參考也是有很好的價值的!

            隨著現(xiàn)代社會信息化進程的加快,嵌入式系統(tǒng)被廣泛的地應(yīng)用于軍事、家用、工業(yè)、商業(yè)、辦公、醫(yī)療等社會各個方 面,表現(xiàn)出很強的投資價值。從國際范圍來看,作為數(shù)字化電子信息產(chǎn)品核心的嵌入式系統(tǒng)目前其硬件和軟件開發(fā)工具市場已經(jīng)突破2000億美元,嵌入式系統(tǒng)帶 來的全球工業(yè)年產(chǎn)值更是達到了一萬億美元,隨著全球經(jīng)濟的持續(xù)增長以及信息化的加速發(fā)展,嵌入式系統(tǒng)市場必將進一步增長。
            本課程是為了適應(yīng)目前發(fā)展迅速的嵌入式Linux需求而設(shè)計,課程目標是讓學員達到適應(yīng)嵌入式應(yīng)用軟件開發(fā)、嵌入式系統(tǒng)開發(fā)或嵌入式驅(qū)動開發(fā)的基本素質(zhì)。 課程循序漸進的帶領(lǐng)您嵌入式開發(fā)的世界,采用了目前應(yīng)用最廣泛的軟硬件開發(fā)平臺(LinuxArm),可以保證您盡量貼近目前企業(yè)需求。

            學習步驟如下:(一步步來哦:)


            1、Linux
            基礎(chǔ)

            安裝Linux操作系統(tǒng)
            Linux
            文件系統(tǒng)
            Linux
            常用命令
            Linux
            啟動過程詳解
            熟悉Linux服務(wù) 能夠獨立安裝Linux操作系統(tǒng)
            能夠熟練使用Linux系統(tǒng)的基本命令
            認識Linux系統(tǒng)的常用服務(wù) 安裝Linux操作系統(tǒng)
            Linux
            基本命令實踐
            設(shè)置Linux環(huán)境變量
            定制Linux的服務(wù) Shell 編程基礎(chǔ) 使用vi編輯文件
            使用Emacs編輯文件
            使用其他編輯器


            2、Shell 編程基礎(chǔ)

            Shell簡介
            認識后臺程序
            Bash
            編程 熟悉Linux系統(tǒng)下的編輯環(huán)境
            熟悉Linux下的各種Shell
            熟練進行shell編程 熟悉vi基本操作
            熟悉Emacs的基本操作
            比較不同shell的區(qū)別
            編寫一個測試服務(wù)器是否連通的shell腳本程序
            編寫一個查看進程是否存在的shell腳本程序
            編寫一個帶有循環(huán)語句的shell腳本程序


            3、Linux 下的 C 編程基礎(chǔ)

            linux C語言環(huán)境概述
            Gcc
            使用方法
            Gdb
            調(diào)試技術(shù)
            Autoconf
            Automake
            Makefile
            代碼優(yōu)化 熟悉Linux系統(tǒng)下的開發(fā)環(huán)境
            熟悉Gcc編譯器
            熟悉Makefile規(guī)則 編寫Hello,World程序
            使用 make命令編譯程序
            編寫帶有一個循環(huán)的程序
            調(diào)試一個有問題的程序


            4、嵌入式系統(tǒng)開發(fā)基礎(chǔ)

            嵌入式系統(tǒng)概述
            交叉編譯
            配置TFTP服務(wù)
            配置NFS服務(wù)
            下載Bootloader和內(nèi)核
            嵌入式Linux應(yīng)用軟件開發(fā)流程
            熟悉嵌入式系統(tǒng)概念以及開發(fā)流程
            建立嵌入式系統(tǒng)開發(fā)環(huán)境 制作cross_gcc工具鏈
            編譯并下載U-boot
            編譯并下載Linux內(nèi)核
            編譯并下載Linux應(yīng)用程序


            4、嵌入式系統(tǒng)移植

            Linux內(nèi)核代碼
            平臺相關(guān)代碼分析
            ARM
            平臺介紹
            平臺移植的關(guān)鍵技術(shù)
            移植Linux內(nèi)核到 ARM平臺 了解移植的概念
            能夠移植Linux內(nèi)核 移植Linux2.6內(nèi)核到 ARM9開發(fā)板


            5、嵌入式 Linux 下串口通信

            串行I/O的基本概念
            嵌入式Linux應(yīng)用軟件開發(fā)流程
            Linux
            系統(tǒng)的文件和設(shè)備
            與文件相關(guān)的系統(tǒng)調(diào)用
            配置超級終端和MiniCOM 能夠熟悉進行串口通信
            熟悉文件I/O 編寫串口通信程序
            編寫多串口通信程序


            6、嵌入式系統(tǒng)中多進程程序設(shè)計

            Linux系統(tǒng)進程概述
            嵌入式系統(tǒng)的進程特點
            進程操作
            守護進程
            相關(guān)的系統(tǒng)調(diào)用 了解Linux系統(tǒng)中進程的概念
            能夠編寫多進程程序 編寫多進程程序
            編寫一個守護進程程序
            sleep
            系統(tǒng)調(diào)用 任務(wù)管理、同步與通信 Linux任務(wù)概述
            任務(wù)調(diào)度
            管道
            信號
            共享內(nèi)存
            任務(wù)管理 API 了解Linux系統(tǒng)任務(wù)管理機制
            熟悉進程間通信的幾種方式
            熟悉嵌入式Linux中的任務(wù)間同步與通信
            編寫一個簡單的管道程序?qū)崿F(xiàn)文件傳輸
            編寫一個使用共享內(nèi)存的程序


            7、嵌入式系統(tǒng)中多線程程序設(shè)計

            線程的基礎(chǔ)知識
            多線程編程方法
            線程應(yīng)用中的同步問題 了解線程的概念
            能夠編寫簡單的多線程程序 編寫一個多線程程序


            8、嵌入式 Linux 網(wǎng)絡(luò)編程

            網(wǎng)絡(luò)基礎(chǔ)知識
            嵌入式LinuxTCP/IP網(wǎng)絡(luò)結(jié)構(gòu)
            socket
            編程
            常用 API函數(shù)
            分析Ping命令的實現(xiàn)
            基本UDP套接口編程
            許可證管理
            PPP
            協(xié)議
            GPRS
            了解嵌入式Linux網(wǎng)絡(luò)體系結(jié)構(gòu)
            能夠進行嵌入式Linux環(huán)境下的socket 編程
            熟悉UDP協(xié)議、PPP協(xié)議
            熟悉GPRS 使用socket 編寫代理服務(wù)器
            使用socket 編寫路由器
            編寫許可證服務(wù)器
            指出TCPUDP的優(yōu)缺點
            編寫一個web服務(wù)器
            編寫一個運行在 ARM平臺的網(wǎng)絡(luò)播放器


            9、GUI 程序開發(fā)

            GUI基礎(chǔ)
            嵌入式系統(tǒng)GUI類型
            編譯QT
            進行QT開發(fā) 熟悉嵌入式系統(tǒng)常用的GUI
            能夠進行QT編程 使用QT編寫“HelloWorld”程序
            調(diào)試一個加入信號/槽的實例
            通過重載QWidget 類方法處理事件


            10、Linux 字符設(shè)備驅(qū)動程序

            設(shè)備驅(qū)動程序基礎(chǔ)知識
            Linux
            系統(tǒng)的模塊
            字符設(shè)備驅(qū)動分析
            fs_operation
            結(jié)構(gòu)
            加載驅(qū)動程序 了解設(shè)備驅(qū)動程序的概念
            了解Linux字符設(shè)備驅(qū)動程序結(jié)構(gòu)
            能夠編寫字符設(shè)備驅(qū)動程序 編寫Skull驅(qū)動
            編寫鍵盤驅(qū)動
            編寫I/O驅(qū)動
            分析一個看門狗驅(qū)動程序
            對比Linux2.6內(nèi)核與2.4內(nèi)核中字符設(shè)備驅(qū)動的不同
            Linux
            塊設(shè)備驅(qū)動程序 塊設(shè)備驅(qū)動程序工作原理
            典型的塊設(shè)備驅(qū)動程序分析
            塊設(shè)備的讀寫請求隊列 了解Linux塊設(shè)備驅(qū)動程序結(jié)構(gòu)
            能夠編寫簡單的塊設(shè)備驅(qū)動程序 比較字符設(shè)備與塊設(shè)備的異同
            編寫MMC卡驅(qū)動程序
            分析一個文件系統(tǒng)
            對比Linux2.6內(nèi)核與2.4內(nèi)核中塊設(shè)備驅(qū)動的不同


            11、文件系統(tǒng)

            虛擬文件系統(tǒng)
            文件系統(tǒng)的建立
            ramfs
            內(nèi)存文件系統(tǒng)
            proc
            文件系統(tǒng)
            devfs
            文件系統(tǒng)
            MTD
            技術(shù)簡介
            MTD
            塊設(shè)備初始化
            MTD
            塊設(shè)備的讀寫操作 了解Linux系統(tǒng)的文件系統(tǒng)
            了解嵌入式Linux的文件系統(tǒng)
            了解MTD技術(shù)
            能夠編寫簡單的文件系統(tǒng) 為 ARM9開發(fā)板添加 MTD支持
            移植JFFS2文件系統(tǒng)
            通過proc文件系統(tǒng)修改操作系統(tǒng)參數(shù)
            分析romfs 文件系統(tǒng)源代碼
            創(chuàng)建一個cramfs 文件系統(tǒng)

            posted @ 2007-12-05 22:03 菌子 閱讀(476) | 評論 (0)編輯 收藏

            2007年12月4日

             

            轉(zhuǎn)眼間,從事程序員這一行已經(jīng)兩年半了。

            記得上中學的時候,剛接觸了電腦,在體驗了Windows得神奇以后,我就開始立志,希望將來能成為一個軟件工程師。那時,在我的每本課本得第一頁,除了會寫上我自己的名字以外,還會有一行用鋼筆寫下的黑體字 “我的未來,我的Microsoft” 。

            大學畢業(yè)以后進入一家普通的軟件公司,渾渾噩噩得過著Coding & Debug 的日子。不知道工作是為了誰,也不知道工作是為了什么,只知道我只是一個程序員。人沒有目標和理想,就是行尸走肉,而我,就是這樣一個臭皮囊,已經(jīng)恍惚了這么多年。

            有一天,終于又重新打開求職的網(wǎng)頁,又看到了那個從前在心目中無比神圣的Logo,那個永遠的Microsoft。

            我終于明白了那時的夢想。其實我真正想要的,就是能夠像Microsoft一樣,能夠被更多的人需要,能夠?qū)θ藗兊纳钣蟹e極得影響,這才是我工作和人生的價值。

            覺得為時已晚的時候,恰恰是最早的時候。

            還好,我還年輕。

            我的未來,我的Microsoft。

            posted @ 2007-12-04 22:45 菌子 閱讀(292) | 評論 (0)編輯 收藏

            2007年8月18日

             



             



             



             



             



             



             



             



             



             



             



             



             



             



             



             



             



             



             



             



             



             



             



             



             



             



             



             



             

            posted @ 2007-08-18 12:51 菌子 閱讀(643) | 評論 (5)編輯 收藏
            僅列出標題  下一頁

            導航

            <2025年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            統(tǒng)計

            常用鏈接

            留言簿(8)

            隨筆分類

            隨筆檔案

            令一片星空

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            日韩亚洲国产综合久久久| 日本道色综合久久影院| 九九热久久免费视频| 亚洲精品无码专区久久久| 国产成人精品综合久久久| 中文字幕热久久久久久久| 久久精品?ⅴ无码中文字幕| 久久99精品久久只有精品| 国产一区二区久久久| 精品久久人人做人人爽综合| 久久综合久久美利坚合众国| 国产精品美女久久久久久2018| 久久精品国产精品亜洲毛片| 亚洲欧美伊人久久综合一区二区 | 欧美精品国产综合久久| 国内精品久久久久影院一蜜桃| 99久久精品免费看国产一区二区三区 | 久久精品亚洲福利| 成人午夜精品无码区久久| 中文字幕亚洲综合久久| 久久男人Av资源网站无码软件| 久久人与动人物a级毛片| 久久午夜福利无码1000合集| 天天久久狠狠色综合| 久久精品无码专区免费青青| 久久久这里只有精品加勒比 | 久久国产精品成人免费| 青青草国产精品久久久久| 久久国产精品99国产精| 无码伊人66久久大杳蕉网站谷歌 | 亚洲午夜无码久久久久| 久久精品桃花综合| 无码国内精品久久综合88| 亚洲国产成人乱码精品女人久久久不卡| 99国内精品久久久久久久| 狠狠色丁香久久婷婷综合五月| 97精品国产97久久久久久免费| 色婷婷噜噜久久国产精品12p| 欧美性猛交xxxx免费看久久久| 久久久久亚洲AV无码去区首| AV无码久久久久不卡蜜桃|