max116
发表于 2012-03-01 10:09
设备驱动程序自然是给硬件写驱动,目前国内有哪些公司做这个,成长性如何?
还有就是内核的选择上,初学的话,哪个更容易上手和把握?
谢谢!
MagicBoy2010
发表于 2012-03-01 11:47
我是用bochs捣鼓的,不用担心软盘坏了,正在一点一点抄0.11的代码,安自己思路重写,感觉有点傻 。另外还装了2.4.0 的内核。。。 你在2.4上改进的调度算法能分享不? x86机制看了老是忘,没你以前学的疯狂阿还得加把劲。。。
=============================
软盘是我最原始阶段的产物,后来用grub和U盘来做了。另外,我没有在2.4的基础上哪怕做那么一丁点的优化,我觉得如果一个东西还不熟的话,是很难在上面做一些创新的。。。。
MagicBoy2010
发表于 2012-03-01 11:50
冒泡觉得 风兄 更文雅一典。。恩。。。
=========================
我这不是怕不小心打成丰胸嘛,后来求证过了,的确是谷哥,所以才放下心来,哈哈
azfa123
发表于 2012-03-01 12:26
看MagicBoy2010 兄书想到一个问题(以前怎么就没想到呢):
down_interruptible
__down_interruptible
__down_common (当然这个内联,和问题无关)
其中自旋锁顺序为:
spin_lock_irqsave(&sem->lock, flags); 1
……
spin_unlock_irq(&sem->lock); 2
timeout = schedule_timeout(timeout);
spin_lock_irq(&sem->lock); 3
……
spin_unlock_irqrestore(&sem->lock, flags); 4
1234处加锁解锁不对称,会不会有问题?
比如有2个内核线程争用信号量,一个调用顺序如上,另一个依次为5678.那调用顺序会不会变成12563478,导致1中保存的中断开关状态(可能关着),变为了5中保存的中断状态(必然开着)?
styshoo1986
发表于 2012-03-01 14:33
顶起来,牛人很多啊。
ww2000e
发表于 2012-03-01 15:29
作者给内核提交过代码没?
MagicBoy2010
发表于 2012-03-01 19:46
作者给内核提交过代码没?
======================================
作者一直是个围观者
MagicBoy2010
发表于 2012-03-01 20:17
本帖最后由 MagicBoy2010 于 2012-03-01 22:32 编辑
看MagicBoy2010 兄书想到一个问题(以前怎么就没想到呢):
down_interruptible
__down_interruptible
__down_common (当然这个内联,和问题无关)
其中自旋锁顺序为:
spin_lock_irqsave(&sem->lock, flags); 1
……
spin_unlock_irq(&sem->lock); 2
timeout = schedule_timeout(timeout);
spin_lock_irq(&sem->lock); 3
……
spin_unlock_irqrestore(&sem->lock, flags); 4
1234处加锁解锁不对称,会不会有问题?
比如有2个内核线程争用信号量,一个调用顺序如上,另一个依次为5678.那调用顺序会不会变成12563478,导致1中保存的中断开关状态(可能关着),变为了5中保存的中断状态(必然开着)?
=================================================================================================
在SMP系统中,如果两个内核线程在不同的处理器上争用信号量,就不会出现你说的中断状态改变的问题。所以我想你更关心的是UP系统,在UP系统上,你所说的调用顺序我觉得是有可能的,2处spin_unlock_irq实际上演化成local_irq_enable和preempt_enable,2处接下来就会有一个调度点,所以运行另一个线程B是完全可能的,B如果调用down_interruptible,就进入了你所说的调用顺序,因此5将保持一个打开的中断,4退出时中断是关的(如你假设的那样),但是8退出时中断是打开的。不过我的理解是,它不会对系统造成什么影响,因为你假设的前提是1之前中断是关闭的,而中断关闭的情形无非是1.hardirq阶段,2. UP系统中的互斥保护,情形1显然不可能,hardirq阶段你不应该调用down,至于2嘛,down调用的本身就是用来实现互斥,更没有理由在其调用前关掉系统中断,所以从这个角度,我感觉1和4处直接用spin_lock_irq貌似更合理点,你觉得呢?
其实这里还有一个很有趣的问题是在schedule_timeout函数中,__down_common会将当前进程状态设置为TASK_INTERRUPTIBLE,然后会调用schedule,但是在schedule之前,抢占是有可能,那么current会被移除运行队列吗?
azfa123
发表于 2012-03-01 20:56
回复 28# MagicBoy2010
谢谢 MagicBoy2010 兄提点。经MagicBoy2010 兄分析,1和4处就应该用spin_lock,就算保持对称也应该这么玩嘛。不知道内核开发者到底为什么一定要那么玩,难道是鼓励后来者多思考……
……但是在schedule之前,抢占是有可能,那么current会被移除运行队列吗?
不会。因为调度之前如果还没设置完成,移除运行队列,有可能导致当前进程永远醒不了了。所以只要内核抢占,都不允许移除运行队列,直到显示调用schedule.当然内核也可以内核抢占的时候把当前进程移出队列,放在特殊队列,而非等待队列。然后抢占完后看看特殊队列有没有进程,显示没有当前内核的使用方法来得快!
renxiao2003
发表于 2012-03-01 22:03
1.如何学习Linux kernel,一般需要具备哪些知识点
如果学习Linux Kernel,必须要具备的知识我认为有:
操作系统的基础知识,如进程管理,调度等,CPU时间片分配、内存管理、作业管理、磁盘管理等等,就是大学操作系统的知识要学好。
还要具备编译原理相关的知识,这些都是大学里最基本的理论课程。
还要会C语言,因为只有具备这些,你才能基本读懂Linux Kernel啊。
2. 新人如何学习Linux设备驱动程序
要学习设备驱动程序,首先要了解相关的硬件基础知识,然后要了解硬件协议,只有这样你才可能学习驱动程序。
3. 阅读完样章后,你认为此书与市场上其他Linux设备驱动类书籍有什么优缺
其他的设备驱动程序书籍没有阅读过,所以无从比较,但就这本书的样章来看,我觉得对初学者不太适合,适合有一定开发经验的读者。因为书的开始讲不会特别讲解驱动的开发。但在样章中却有很多驱动相关的源代码。
4. 给刚毕业的一些新手进入职场的一些建议(比如求职面试,到外企、国企与私企工作做技术的利弊等等)
求职面试:在简历中千万不要写这个精通那个精通。我最近开始面试人,一看到这样精通那样精通的人,我基本上第一印像就是什么也不会。好多工作五六年的人也不也轻易说精通一门语言,你上来就全部精通,难道你是盖茨啊。面试时一定要敢于表述,不要因为自己是刚毕业生在被问及问题时就不也确认的回答。
到外企:要求外语好,同时对学习外语也有很好的帮助。如果你的外语不好,自己也不爱学外语,建议不要去,去了你也没有太多发展。
到国企:国企,稳定,但工资不要期待太高(但目前情况不是这样,有些国企都有好高的工资)
到私企:可能会对你有全面的要求,所以你能接触很多东西,工资也可能会高,但稳定性可能欠缺一些。
页:
1
2
[3]
4
5
6
7
8
9
10