星光灿烂

C元素

  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             //映射内存区域
 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         //初始化寄存器,这里与具体的设备有关。
 50         ret = s3c_fb_init_registers(&info[index]);
 51         ret = s3c_fb_check_var(&info[index].fb.var, &info[index].fb);
 52 
 53         //所谓的色表(调色盘?),不清除是干啥的。
 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     // 关于中断的初始化工作,貌似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底下建立节点,用于和用户空间交互
 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 菌子 阅读(891) | 评论 (0)编辑 收藏

 

第二章 从内核出发

 

内核开发特点:

  1. 没有libc库。 kernel是一个不依赖任何库的,包括标准C函数库。kernel中使用的一些常见函数,比如memset, strcpy都是在kernel代码中自己实现的。
  2. 请使用gcc来编译内核,因为内核中的代码并不完全符合ANSI C的标准。
  3. 没有内存保护,非法的内存操作可能会使系统挂起。
  4. 不要使用浮点数
  5. 内核栈容量很小( 2 * 页面大小 )
  6. linux是抢占多任务操作系统,进程,内核都可以抢占,而且支持多处理器,所以内核代码需要考虑并发和同步的问题。
  7. 尽量要兼容所有架构(arch),良好的移植性

 

 

 

第三章 进程管理

 

内存描述符及任务结构

  1. 每个进程都对应有一个进程描述符,即task_struct结构,用来记录这个进程的所有信息:打开的文件,地址空间,进程状态……
  2. linux通过slab(个人感觉类似于pool)分配task_struct。 进程的task_struct指针存放在位于内核栈底的一个叫做thread_info的结构里面。
  3. 内核通过PID来标识进程,默认设置最大值,即默认系统最大进程数为32768。内核中一般通过current宏来获的当前进程的task_struct,不同的体系架构下,实现方法可能会不同。
  4. 进程状态,可以通过set_task_state来设置
    1. TASK_RUNNING 进程可执行;它正在运行,或者是在任务队列中等待被运行。
    2. TASK_INTERRUPTIBLE 进程可中断;进程被阻塞,但是可以通过信号,或者其他方法唤醒。
    3. TASK_UNINTERRUPTIBLE 进程不可中断;进程被阻塞,而且不受任何干扰,不会响应信号而被唤醒。
    4. TASK_ZOMBIE 进程僵死;进程已经运行完毕,但是父进程没有调用wait4系统调用,此时子进程的task_struct保留,等待父进程查询相关信息。【Agaric:相似的,在windows上,进程的HANDLE通过(CreateProcess或者OpenProcess得到) 在程序运行完毕后,在CloseHandle 前,也是仍然有效,用于查询进程相关信息,比如Exit code 等等】
    5. TASK_STOPPED 进程停止;
  5. 进程上下文: 进程通过系统调用或者异常陷入内核,此时内核是"代表进程"在工作,这个工作环境,叫做进程上下文,内核程序可以通过宏来获的当前进程的task_struct
  6. 进程家族树: 除了init,每个进程都有父进程, 每个进程都可能有子进程及兄弟进程。

(待续)

posted @ 2008-03-06 00:00 菌子 阅读(1735) | 评论 (7)编辑 收藏

配置svnserver

可以直接在YaST2里面,在xinetd设置里面,添加svnserve的选项。
但是要注意运行使用的用户,默认的svn:svn是没有被建立的, 我改成nobody以后就ok了,但不知道有什么什么问题。


配置APACHE

采用svnserver的方法有许多不便,所以我还是决定最终采用http的方法。
OpenSuse的apache2的配置文件布局似乎和其他系统有点不一样。 它在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目录及一些设置,一般教程里面都是修改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设定里面就可以选择和加载这个模块了。 就是这个问题,花了我好几个消失来解决。

其他的配置方法,可以参考svn中文手册,和网上其他的配置教程。
 







    


posted @ 2008-03-01 17:08 菌子 阅读(667) | 评论 (0)编辑 收藏
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 菌子 阅读(206) | 评论 (0)编辑 收藏

 

我使用的不是SMDK2412的开发板,而是公司已经出货的2412的机器,原来用的是自己的一个OS,现在打算在他上面运行linux.

编译2.6的内核,需要比较新的gcc, 我暂时能找到的新版arm-linux-gcc也就是3.4.1。,之前用arm-none-linux-eabi-gcc 4.1编出来的zImage好大,基本不能用。对于开发工具和内核版本,我觉得还是越新越好(稳定版),否则可能会遇到一些稀奇古怪的问题。

1.修改Boot

使用公司原有的Boot, 在Boot启动Kernel的时候,加入的参数设定,然后用公司专用的usb更新工具烧录kernel到flash中,启动机器以后显示了一堆乱码,在启动参数 console=ttySAC0后面加上了,115200,设定波特率以后一切OK.

2.MTD分区:修改文件common-smdk.c , 修改其中的MTD设备的分区。

新的kernel里面已经有了默认分区表,我们只要根据我们需要来做部分修改就可以,我的nand有512MB, 我目前只是将前面的2M分给boot,kernel, 紧接下来的4M分给rootfs,打算暂时加载一个 简单的cramfs。其他的nand都还没有用。

3.取消NAND驱动中的ECC读校验,以及坏块监测部分, 因为NAND操作部分,boot和kernel有一些不同。

重启以后,mount root分区失败,还打出了I/O 错误。 关闭了ECC校验,修改了pc工具的烧录地址以后,ok. 这都是因为我们的烧录工具使用的地址表示方法和ecc的方式有一些不同。

4.烧录 root 文件系统。

拿了一个在kernel2.4 2440 上用过得cramfs直接来用,提示找不到dev/console, 上网查了一遍,应该是因为现在新版的kernel去掉了devfs的缘故,为了先快速的有一个可执行环境,所以在网上找了一个现成的,已经自己建立好节点的cramfs,里面的busybox版本也比较新。

 

开机运行,总算见到了亲爱的shell.

posted @ 2008-01-28 23:30 菌子 阅读(1091) | 评论 (2)编辑 收藏
工作需要,加之好奇心,终于给自己家的PC里面也安装上了Linux。 为了和公司的OpenSuse有所不同于是就选择另一款大名顶顶的发行版Fedora.

我一直认为,人生总是要遇到一些挫折的。 可不就是装个系统嘛,为啥就要这样难为我捏?

懒得插上光驱,于是就用硬盘安装的办法。 可grub for dos 就是不认我从ISO里解出来的vmlinuz, 汗,放狗去搜,貌似没有人遇到过这个情况。不能就这样放弃吧?再看看解压出来的一个jpg,居然也打不开,nnd是不是文件解错了。 之前我解文件用的是winrar, 换成 Deamon Tools 试试, NND 这次那附图OK了。 再用grub来load , OK! 额。。 原来winrar在解iso的时候会掉链子, 伙计们以后要千万小心。

以后的事就顺利多了。  装显卡驱动,直接用yum的包就可以啦,不过装完以后需要修改grub的list,因为内核也更新了,需要从新的内核启动,显卡驱动才可以奏效。Fedora默认已经安装了桌面特效,显卡驱动安装完以后,直接在菜单里面选择打开特效就OK. 嘿嘿,效果还可以吧。

 


接下来就是解决QQ滴问题了。 开始用Pigin,只能聊天,而且只能看见在线的好友,勉强能用,后来又装了wine上面的qq2007,应该是配置的问题,总是crash。 不过最后发现了lumaQQ和eva这两个好东东。 我本人还是比较喜欢eva的,功能很全了,界面也很友好,只可惜这个家伙不能像其他的一些KDE程序在gnome下也能正常运行,只能在KDE下玩儿。LumaQQ作者现在主要在维护iphone版本的, 普通的java版有一段时间没更新了, 现在还能常用, 界面也还好。

这几天综合下来,感觉Fedora还算不错,但是易用性上面,不如Opensuse。 至于 ubuntu , 我用的不多, 感觉优点是国内源多,所以更新和下载程序速度比较快。

工作的任务是一直Linux内核,现在看来,还有很多东西要学,很多路要走。

我觉得对于这样比较长期/艰巨的任务,相我这样工作经验不丰富的人,很难针对它来指定一个计划, 其实就是很难将其分割成一步步来完成的小计划。导致每天都晕晕呼呼的不知道干什么好。 希望有经验的朋友能给点建议。


Winrar解ISO可能会掉链子

对Linux有兴趣的初学者,不妨亲身在机器上安装一个易用的发行版(非虚拟机, 推荐Ubuntu, Opensuse10.3(KDE))
posted @ 2008-01-14 23:50 菌子 阅读(959) | 评论 (2)编辑 收藏
MIT   BBS上说微软电话面试的一道题就是“Who   do   you   think   is   the   best   coder,   and   why?”。我觉得挺有意思的,也来凑个热闹。排名不分先后。

Bill   Joy,   前任Sun的首席科学家,当年在Berkeley时主持开发了最早版本的BSD。他还是vi和csh的作者。当然,Csh   Programming   Considered   Harmful   是另一个话题乐。据说他想看看自己能不能写个操作系统,就在三天里写了个自己的Unix,     也就是BSD的前身。当然是传说了,但足见他的功力。另一个传说是,1980年初的时候,DARPA让BBN在Berkley   Unix里加上BBN开发的TCP/IP代码。但当时还是研究生的B伯伯怒了,拒绝把BBN   TCP/IP加入BSD,因为他觉得BBN的TCP/IP写得不好。于是B伯伯出手了,端的是一箭封喉,很快就写出了高性能的伯克利版TCP/IP。当时   BBN和DARPA签了巨额合同开发TCP/IP   Stack,谁知他们的代码还不如一个研究生的好。于是他们开会。只见当时B伯伯穿个T-shirt出现在会议室(当时穿T-shirt不象现在,还是相 当散漫的哈)。只见BBN问:你怎么写出来的?而B伯伯答:简单,你读协议,然后编程就行了。最令偶晕倒的是,B伯伯硕士毕业后决定到工业界发展,于是就 到了当时只有一间办公室的Sun,   然后他就把Sparc设计出来乐。。。象这种软硬通吃的牛人,想不佩服都不行的说。据Bill   Joy的同事说,一般开会的时候B伯伯总是拿一堆杂志漫不经心地读。但往往在关键之处,B伯伯发言,直切要害,提出漂亮的构想,让同事们彻底崩溃。对了, 他还是Java   Spec和JINI的主要作者之一。


John   Carmack,ID   Software的founder和Lead   Programmer。上个月和一个搞图形的师兄聊天,他竟然不知道John   Carmack,   也让偶大大地晕了一把。不过也许搞研究的和搞实战的多少有些隔吧。想必喜欢第一人称射击游戏的都知道J哥哥。90年代初只要能在PC上搞个小动画都能让人 惊叹一番的时候,J哥哥就推出了石破天惊的Castle   Wolfstein,   然后再接再励,doom,   doomII,   Quake...每次都把3-D技术推到极
限。J哥哥的简历上说自己的专长是"Exhaust   3-D   technology",真是牛人之言不我欺的说。做J哥哥这样的人是很幸福的,因为各大图形卡厂家一有了新产品就要向他“进贡”   ,不然如果他的游戏不支持哪种卡,哪种卡基本就会夭折乐。当初MS的Direct3D也得听取他的意见,修改了不少API。当然,J哥哥在结婚前十数年如 一日地每天编程14小时以上,也是偶们凡人望尘莫及的。对了,J哥哥高中肆业(?),可以说是自学成才。不过呢,谁要用这个例子来为自己学习不好辩护,就 大错特错了。那   Leonardo   Da   Vinci还是自学成才呢(人是私生子,不能上学)。普通人和天才还是有区别的。对了,其实偶们叫“达分奇”是相当不对的,因为Vinci是地名,而Da   Vinci就是从Vinci来的人的意思。换句话说,Leonardo   Da   Vinci就是“从Vinci来的Leonardo”的意思。叫别人“Da   Vinci”就不知所谓乐。嗯,扯远了,打住。

David   Cutler,VMS和Windows   NT的首席设计师,去微软前号称硅谷最牛的kernel开发员。当初他和他的手下在微软一周内把一个具备基本功能的bootable   kernel写出来,然后说:“who   can't   write   an   OS   in   a   week?",也是牛气冲天的说。顺便说一句,D爷爷到NT3.5时,管理1500名开发员,自己还兼做设计和编程,不改coder本色啊。

D爷爷天生脾气火爆,和人争论时喜欢双手猛击桌子以壮声势。:-)   日常交谈F-word不离口。他面试秘书时必问:"what   do   you   think   of   the   word   'fuk'?"   ,让无数美女刹羽而归。终于有一天,一个同样火爆的女面对这个问题脱口而出:"That's   my   favorite   word"。于是她被录取乐,为D爷爷工作到NT3.5发布。

Don   Knuth。高爷爷其实用不着偶多说。学编程的不知道他就好像学物理的不知道牛顿,学数学的不知道欧拉,学音乐的不知道莫扎特,学Delphi的不知到   Anders   Hejlsberg,或者学Linux不知道Linus   Torvalds一样,不可原谅啊。:-)为了让文章完整,就再罗唆几句吧。高爷爷本科时就开始给行行色色的公司写各种稀奇古怪的编译器挣外快了。他卖给 别人时收一两千美元,那些公司拿了code,加工一下卖出去就是上万上十万。不过也没见高爷爷不爽过,学者本色的说。想想那可是60年代初啊,高爷爷写编 译器写多了,顺带就搞出了个Attribute   Grammar和LR(k),大大地造福后人啊。至于高爷爷在CalTech的编程比赛(有Alan   Kay得众多高高手参加)总是第一,写的Tex到86年就code   freeze,还附带2^n美分奖励等等都是耳熟能详的,偶就不饶舌乐。

顺便说一下,高老大爷是无可争议的写作高手。他给Concrete   Mathematics   写的前言可谓字字铿锵,堪为前言的典范。他的技术文章也是一绝,文风细致,解释精当,而且没有学究气,不失轻快跳脱。记得几年前读Concrete   Mathemathics,时不时开怀大笑,让老妈极其郁闷,觉得我nerdy到家,不可救药。其实呢,子非鱼,安知鱼之乐,更不知那完全是高爷爷的功 劳。说到写作高手,不能不提Stephen   A.   Cook。他的文章当年就被我们的写作老师极力推荐,号称典雅文风的样本。库爷爷一头银发,身材颀长,总是面带谦和的微笑,颇有仙风道骨,正好和他的仙文 相配的说。

高爷爷其实还是开源运动的先驱。虽然他没有象Richard   Stallman那样八方奔走,但他捐献了好多作品,都可以在网上看到,比如著名的Mathematical   Writing,MMIXWare,The   Tex   Book等,更不用说足以让他流芳百世的Tex乐。

Ken   Thompson,C语言前身B语言的作者,Unix的发明人之一(另一个是Dennis   M.   Riche老大,被尊为DMR),Belle(一个厉害的国际象棋程序)的作者之一,   操作系统Plan   9的主要作者(另一个是大牛人Rob   Pike,   前不久被google挖走了)。Ken爷爷也算是计算机历史上开天辟地的人物了。1969年还是计算机史前时代,普通人都认为只有大型机才能运行通用的操 作系统,小型机只有高山仰止的份儿。至于用高级语言来写操作系统,更是笑谈。Ken爷爷自然不是池中物,于是他和DMR怒了,在1969年到1970间用 汇编在PDP-7上写出了UNIX的第一个版本。他们并不知道,一场轰轰烈烈的UNIX传奇由此拉开了序幕。Ken爷爷在1971年又把Unix用C重 写,于是C在随后20年成就了不知多少豪杰的梦想和光荣。

Ken爷爷还有段佳话:   装了UNIX的PDP-11最早被安装在Bell   Lab里供大家日常使用。很快大家就发现Ken爷爷总能进入他们的帐户,获得最高权限。Bell   Lab里的科学家都心比天高,当然被搞得郁闷无比。于是有高手怒了,跳出来分析了UNIX代码,找到后门,修改代码,然后重新编译了整个UNIX。就在大 家都以为“这个世界清净了”的时候,他们发现Ken爷爷还是轻而易举地拿到他们的帐户权限,百思不解后,只好继续郁闷。谁知道这一郁闷,就郁闷了14年, 直到Ken爷爷道出个中缘由。原来,代码里的确有后门,但后门不在Unix代码里,而在编译Unix代码的C编译器里。每次C编译器编译UNIX的代码, 就自动生成后门代码。而整个Bell   Lab的人,都是用Ken爷爷的C编译器。:D
posted @ 2007-12-23 00:39 菌子 阅读(399) | 评论 (0)编辑 收藏
多新手学习嵌入式系统,不清楚那么多方向舵知识和参考书,该从哪里开始学习。入手了,却又在该先学习什么后学习什么上失去方向。这里有你想要的答案,帮你指点迷经。

这是我在ITjob培训网上找到的课程大纲,觉得作为嵌入式系统开发的学习步骤,按部就班地去施行和学习,到不失为一种好的学习方法:)

就算是作为参考也是有很好的价值的!

随着现代社会信息化进程的加快,嵌入式系统被广泛的地应用于军事、家用、工业、商业、办公、医疗等社会各个方 面,表现出很强的投资价值。从国际范围来看,作为数字化电子信息产品核心的嵌入式系统目前其硬件和软件开发工具市场已经突破2000亿美元,嵌入式系统带 来的全球工业年产值更是达到了一万亿美元,随着全球经济的持续增长以及信息化的加速发展,嵌入式系统市场必将进一步增长。
本课程是为了适应目前发展迅速的嵌入式Linux需求而设计,课程目标是让学员达到适应嵌入式应用软件开发、嵌入式系统开发或嵌入式驱动开发的基本素质。 课程循序渐进的带领您嵌入式开发的世界,采用了目前应用最广泛的软硬件开发平台(LinuxArm),可以保证您尽量贴近目前企业需求。

学习步骤如下:(一步步来哦:)


1、Linux
基础

安装Linux操作系统
Linux
文件系统
Linux
常用命令
Linux
启动过程详解
熟悉Linux服务 能够独立安装Linux操作系统
能够熟练使用Linux系统的基本命令
认识Linux系统的常用服务 安装Linux操作系统
Linux
基本命令实践
设置Linux环境变量
定制Linux的服务 Shell 编程基础 使用vi编辑文件
使用Emacs编辑文件
使用其他编辑器


2、Shell 编程基础

Shell简介
认识后台程序
Bash
编程 熟悉Linux系统下的编辑环境
熟悉Linux下的各种Shell
熟练进行shell编程 熟悉vi基本操作
熟悉Emacs的基本操作
比较不同shell的区别
编写一个测试服务器是否连通的shell脚本程序
编写一个查看进程是否存在的shell脚本程序
编写一个带有循环语句的shell脚本程序


3、Linux 下的 C 编程基础

linux C语言环境概述
Gcc
使用方法
Gdb
调试技术
Autoconf
Automake
Makefile
代码优化 熟悉Linux系统下的开发环境
熟悉Gcc编译器
熟悉Makefile规则 编写Hello,World程序
使用 make命令编译程序
编写带有一个循环的程序
调试一个有问题的程序


4、嵌入式系统开发基础

嵌入式系统概述
交叉编译
配置TFTP服务
配置NFS服务
下载Bootloader和内核
嵌入式Linux应用软件开发流程
熟悉嵌入式系统概念以及开发流程
建立嵌入式系统开发环境 制作cross_gcc工具链
编译并下载U-boot
编译并下载Linux内核
编译并下载Linux应用程序


4、嵌入式系统移植

Linux内核代码
平台相关代码分析
ARM
平台介绍
平台移植的关键技术
移植Linux内核到 ARM平台 了解移植的概念
能够移植Linux内核 移植Linux2.6内核到 ARM9开发板


5、嵌入式 Linux 下串口通信

串行I/O的基本概念
嵌入式Linux应用软件开发流程
Linux
系统的文件和设备
与文件相关的系统调用
配置超级终端和MiniCOM 能够熟悉进行串口通信
熟悉文件I/O 编写串口通信程序
编写多串口通信程序


6、嵌入式系统中多进程程序设计

Linux系统进程概述
嵌入式系统的进程特点
进程操作
守护进程
相关的系统调用 了解Linux系统中进程的概念
能够编写多进程程序 编写多进程程序
编写一个守护进程程序
sleep
系统调用 任务管理、同步与通信 Linux任务概述
任务调度
管道
信号
共享内存
任务管理 API 了解Linux系统任务管理机制
熟悉进程间通信的几种方式
熟悉嵌入式Linux中的任务间同步与通信
编写一个简单的管道程序实现文件传输
编写一个使用共享内存的程序


7、嵌入式系统中多线程程序设计

线程的基础知识
多线程编程方法
线程应用中的同步问题 了解线程的概念
能够编写简单的多线程程序 编写一个多线程程序


8、嵌入式 Linux 网络编程

网络基础知识
嵌入式LinuxTCP/IP网络结构
socket
编程
常用 API函数
分析Ping命令的实现
基本UDP套接口编程
许可证管理
PPP
协议
GPRS
了解嵌入式Linux网络体系结构
能够进行嵌入式Linux环境下的socket 编程
熟悉UDP协议、PPP协议
熟悉GPRS 使用socket 编写代理服务器
使用socket 编写路由器
编写许可证服务器
指出TCPUDP的优缺点
编写一个web服务器
编写一个运行在 ARM平台的网络播放器


9、GUI 程序开发

GUI基础
嵌入式系统GUI类型
编译QT
进行QT开发 熟悉嵌入式系统常用的GUI
能够进行QT编程 使用QT编写“HelloWorld”程序
调试一个加入信号/槽的实例
通过重载QWidget 类方法处理事件


10、Linux 字符设备驱动程序

设备驱动程序基础知识
Linux
系统的模块
字符设备驱动分析
fs_operation
结构
加载驱动程序 了解设备驱动程序的概念
了解Linux字符设备驱动程序结构
能够编写字符设备驱动程序 编写Skull驱动
编写键盘驱动
编写I/O驱动
分析一个看门狗驱动程序
对比Linux2.6内核与2.4内核中字符设备驱动的不同
Linux
块设备驱动程序 块设备驱动程序工作原理
典型的块设备驱动程序分析
块设备的读写请求队列 了解Linux块设备驱动程序结构
能够编写简单的块设备驱动程序 比较字符设备与块设备的异同
编写MMC卡驱动程序
分析一个文件系统
对比Linux2.6内核与2.4内核中块设备驱动的不同


11、文件系统

虚拟文件系统
文件系统的建立
ramfs
内存文件系统
proc
文件系统
devfs
文件系统
MTD
技术简介
MTD
块设备初始化
MTD
块设备的读写操作 了解Linux系统的文件系统
了解嵌入式Linux的文件系统
了解MTD技术
能够编写简单的文件系统 为 ARM9开发板添加 MTD支持
移植JFFS2文件系统
通过proc文件系统修改操作系统参数
分析romfs 文件系统源代码
创建一个cramfs 文件系统

posted @ 2007-12-05 22:03 菌子 阅读(458) | 评论 (0)编辑 收藏

 

转眼间,从事程序员这一行已经两年半了。

记得上中学的时候,刚接触了电脑,在体验了Windows得神奇以后,我就开始立志,希望将来能成为一个软件工程师。那时,在我的每本课本得第一页,除了会写上我自己的名字以外,还会有一行用钢笔写下的黑体字 “我的未来,我的Microsoft” 。

大学毕业以后进入一家普通的软件公司,浑浑噩噩得过着Coding & Debug 的日子。不知道工作是为了谁,也不知道工作是为了什么,只知道我只是一个程序员。人没有目标和理想,就是行尸走肉,而我,就是这样一个臭皮囊,已经恍惚了这么多年。

有一天,终于又重新打开求职的网页,又看到了那个从前在心目中无比神圣的Logo,那个永远的Microsoft。

我终于明白了那时的梦想。其实我真正想要的,就是能够像Microsoft一样,能够被更多的人需要,能够对人们的生活有积极得影响,这才是我工作和人生的价值。

觉得为时已晚的时候,恰恰是最早的时候。

还好,我还年轻。

我的未来,我的Microsoft。

posted @ 2007-12-04 22:45 菌子 阅读(276) | 评论 (0)编辑 收藏
 



 



 



 



 



 



 



 



 



 



 



 



 



 



 



 



 



 



 



 



 



 



 



 



 



 



 



 



 

posted @ 2007-08-18 12:51 菌子 阅读(618) | 评论 (5)编辑 收藏
仅列出标题
共2页: 1 2 

导航

<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

统计

常用链接

留言簿(8)

随笔分类

随笔档案

令一片星空

搜索

最新评论

阅读排行榜

评论排行榜