1. 编译器的版本和
glibc
库有对应关系吗,如何查看
glibc
的版本(glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc),编译器是不是只带
glibc
被编译生成的
.so
文件,如果自制系统调用的话是不是还要下载
glibc
然后重新编译
答:一般来说制作编译器的时候就会选定
glibc
,所以你得到的编译器里面含有
glibc
的库,既有
so
文件,也有
.a
文件。编译器和Glibc
都在更新的,新编译器一般不能使用过老的
glibc
。但是它们之间的版本关系,我也不了解。
自制系统时,一般直接复制编译器自带的
lib
就可以了,可以参考第
1
期视频的根文件系统部分。
2. 在中断处理函数里主要做什么?有哪些不适合在中断处理函数里处理?希望可以举个例子
答:中断处理函数就是“尽快地处理中断事件”。太过耗时的、不是很紧急的事情,不要放在中断函数里。比如网卡中断程序,它只是尽快地把数据从网卡上读入内存,并不做进一步的分发处理。这后续的处理,是通过触发一个工作队列或是唤醒内核线程来做的。
3. 老师怎么和
usb-hid
设备通讯实现读写设备 任意字节长度?内核
hiddev
和
hidraw
能实现任意字节读写吗?还是自己写一个方便些?思路是怎样的
?
答:硬件上肯定不支持任意长度的读写,驱动里一般都会根据硬件要求发起多次传输。
对于
hiddev
,它根本不支持
write
操作;对于
hidraw
,它的写操作依赖于其他驱动。所以你还是自己写比较方便。主要的难点在于
USB
设备的概念:地址、
Endpoint
、一次传输的长度,把这些都弄清楚了,你可以用
libusb
写
APP
即可,不需要写驱动。如果非要写驱动,也只是在驱动的
read
、
write
里启动数据传输,框架就是一个简单的字符设备驱动,数据传输方面可以参考第
2
期输入子系统里对鼠标的操作。
4.
对于调试来说,目前使用什么工具最合适,对于
uboot
使用
print
太过麻烦吧,而且烧写程序过于麻烦。老师,我看第二期视频,发现输入子系统和总线设备驱动模型有点乱,老师能说说他们之间的联系和区别吗?
答:我是使用
print
,这方便;你事先分析了程序,需要加打印的地方不会太多。只有碰到疑难问题无法分析时,我才用
OPENJTAG
。
输入子系统和总线设备驱动模型一点关系都没有,“总线设备驱动模型”可以认为只是一个技巧:你定义一个
device
,再定义一个
driver
,它们的名字相同时,
drvier
的
probe
函数就被调用──它只是用来把驱动程序分为
2
个文件,一个存放硬件相关的代码,另一个存放跟硬件关系不大的代码。
5.
是否所有的
ARM
芯片都是上电之后自动将
NAND
的前
4K
拷贝至芯片本身的内存
答:只有三星的某几款芯片是这样。支持
NAND
启动的芯片,实质上也有这一个过程:片上固化的程序读取
NAND
到内存中,然后启动。
6.linux
启动代码中物理地址到虚拟地址是怎么建立关系的
答:原理性的东西,可以看第
1
期的
MMU
实验,它是裸板;在
Linux
里怎么建立映射,我也没有去深究过。
7.
不好意思 链接地址还是不太懂。
答:把第
1
期视频的程序从
LED
开始练习一下,很快就明白了。
8.
用摄像头采集数据 如何实现录像的功能
答:一般是先压缩,然后写入文件。
9.
毕业班视频是看完第二期再看吗
答:毕业班视频里
BOOTLOADER
部分,可以看完第
1
期视频后就看;其他部分是看完第
2
期再看。
毕业班视频用来检验第
1
、
2
期的学习成果。
10
大学里怎么提高自己的项目经验,因为不是相关专业的,只是凭借自己兴趣
,
也没有相关项目
答:可以自己构思一个产品,然后去实现它。比如用开发板实现某个功能。
11.
为什么反汇编里显示
0x56000000
是立即数 直接存入寄存器,而
0x123
以后 反而成据?
12.
韦老师,请问下为什么
SP
指针要从
4092
处开始压栈而不是
0+4
地址处开始呢?
答:
0
开始处有代码啊,你在
0
地址处压栈被就破坏程序了。
SP
是向下增长,还是向上增长,其实可以通过编译选项来指定。只是我们经常使用向下增长。
13.PC
指针和
SP
指针的区别
答:
CPU
去
PC
所指向的内存读取数据,这个数据作为指令来执行;
SP
指向一块空闲的内存,这块内存用来暂时存放数据,这些数据是程序执行过程中生成的,比如局部变量。
14.
老师能否讲讲
Uart_stdio
的具体实现 之前只是一笔带过 感觉看不到 里面的原理
答:基本上就是一个变参函数,我也不太懂,只是移植内核的
printk
源码。
15.
有些
ARM9 CPU
不止有内部
RAM
和
ROM,UBOOT
如何改写呢
答:这个问题太方泛了不好回答,简单地说:
UBOOT
的目的是读取并启动内核。实现这个目标的过程中,涉及哪些硬件就去操作哪些硬件。
大概的框架在毕业班视频“自己写
bootloader
”学到。
16.
老师,内核精景分析这本书比较早了 现在还有什么研读的必要吗?写驱动需要
对内核了解到什么程度?
答:是比较早,但是原理一直没变过。它可以作为书桌手边上的工具书,对某块内容想深入理解时,就翻翻它。这书涉及的内容都讲得很深入、细致。
17.
老师对于嵌入式培训怎么看?尤其哪些动不动就
10000
块,上
3
,
4
个月课程的机构?
答:去上培训班,我个人认为只有
2
个好处:自制能力不强的人可以得到一个学习气氛,有面试机会。
单就学习知识来说,培训班的效果没有看视频好。
18.
视频监控项目实现手机
+PC
同传输视频信息,论坛有人发布
QT
精简版,能发布带录吗
答:发布“带录”是什么意思?
19.openjtag+ok6410,擦除nand命令失败
所有连线连好后,连接open ocd,然后telnet。红色为敲入的命令!但是显示不成功!(如图)
所有连线连好后,连接open ocd,然后telnet。红色为敲入的命令!但是显示不成功!(如图)
![](http://www.100ask.org/bbs/data/attachment/forum/201409/18/100101wb4jh4yxzh4o4ez2.png)
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps3CE0.tmp.png
答:openocd的命令行对MLC的支持并不完善,换句话说在openocd不支持MLC NAND。
20.nandflash第0块损坏了 怎么办
答:厂家保证它不会坏,要真坏了,① 它就不能作为启动芯片,即板子只能使用
NOR
启动。②换一个
NAND
芯片吧
21.新人报道,在学习东山哥的
ok6410
的裸板程序,第
20
个
irq
的裸板程序,直接
copy
东山哥的
.bin
文件,发现串口上出现的字符是乱码,不知道哪位大虾遇到过这种问题没,上个图,
整
个晚上,没弄懂。
![](http://www.100ask.org/bbs/data/attachment/forum/201409/18/100200nooaeaeaegaxev83.png)
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps3CE1.tmp.png
答:我没有碰到过,一时间也不知道原因。你可以精简程序,把代码尽可能减少,然后找原因。
22.像图一这样写,不能正常初始化2440存储管理器。其它不变换成图二这种写法,就成成功初始化2440存储管理器。请问问题出在哪里?提前谢谢
不能正常初始化
:
![](http://www.100ask.org/bbs/data/attachment/forum/201409/18/100228s0cb4tmb65mr646x.jpg)
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps3CE2.tmp.png
能正常初始化:
:
![](http://www.100ask.org/bbs/data/attachment/forum/201409/18/100241kio6ffdd1elpcjiz.jpg)
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps3CF2.tmp.png
答:涉及位置无关码,第2期里“第29课第3.3节_裸板调试之JTAG调试命令行调试”以这个程序为例作了讲解。
23.韦老师毕业班自己写bootloade似乎没有管nand ecc
在拷贝bootloader和kernel到sdram中时,nand flash里面自己出错了怎么办?
在拷贝bootloader和kernel到sdram中时,nand flash里面自己出错了怎么办?
答:为了精简程序,我没有理会
ECC
。实际产品中,必须使用
ECC
。
老师 帮忙看看 连接脚本问题 编译出bin文件 700多m:
这是链接脚本
SECTIONS {
firtst 0x00000000 : { head.o init.o nand.o}
second 0x30000000 : AT(4096) { interrupt.o serial.o rtc.o main.o }
. = 0x31000000;
.text : { *(.text) }
.rodata ALIGN(4) : {*(.rodata)}
.data ALIGN(4) : { *(.data) }
.bss ALIGN(4) : { *(.bss) *(COMMON) }
}
答:
.text, .rodata, .data
也要加上
AT(xxx)
,否则就会有
700M
多。因为不加
AT
时,默认的
AT
值就跟链接地址一样。
比如
first
段放在
0
,
.text
段放在0x31000000,不就是
700
多
M
了吗?
24.参照韦老师第三期视频中的 声卡裸板 程序,我自己写了个 摄像头的裸板程序,遇到些问题 没搞清楚 ,敬请解答!
韦老师的裸板程序 是下载到 NADN FLASH 中启动后 ,然后通过重定位到 start 处 ,start 应该是 lds 文件中指定的 33f80000,然后中断发生的时候
硬件就会自动跳到 33f80018 处执行 HandleIRQ ,不知道我这样理解对不对?
答:不对,中断发生时,必定是从
0x18
开始执行。
NAND
启动时,前
4K
代码会被复制到片内
RAM
里,片内
RAM
地址
0x18
处就是中断向量入口,在那里会有跳转指令,跳去执行
SDRAM
中的中断处理函数。
然后,我自己的程序 是直接下载到 SDRAM 32000000 处(因为我使用的另一个 Uboot 有个命令是直接下载运行 bin 文件), lds 指定的地址为 32000000,
我去掉了 head.s 启动程序中的 重定位部分。 请问,这种情况下发生了中断后 硬件 会跳到哪里去执行? 是 32000018 地址吗?
答:回答同上,必定从
0x18
开始执行。你在
UBOOT
下载到
32000000
运行时,程序中应该把
32000000
开始的部分代码复制到
0
地址去,这样才可以使用中断。
如果有 OV7740 的裸板测试程序 可以 发给我吗 ,不胜感激!
答:没有
OV7740
的裸板测试程序。
25.板子mini2440 屏x35,把lcd的驱动程序系在进去后刚开始会显示一行字“
Please press Enter to activate this console. ”过几秒钟之后就成了绿屏 有谁遇到过这种现象吗?
答:绿屏?我倒是没有碰到过,你在
/etc/inittab
里把
tty0
或
tty1
那行删除掉试试,然后重启系统应该可以看到
LCD
没有文字显示。启动后,可以用
echo hello > /dev/tty1
测试
LCD
。
26.请问我按照第0课第2节用u-boot烧裸板程序lcd.bin,烧写正常,但拨到nand运行时,屏上只显示一些色条,是怎么回事,烧led_on.bin也是灯不亮,但烧leds.bin又正常,灯轮流闪,这是怎么回事
![](http://www.100ask.org/bbs/data/attachment/forum/201409/18/100336doo2hok9h7x3kbbo.png)
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps3CF3.tmp.png
答:led_on.bin的问题,你先看看源码,确认一下LED引脚跟JZ2440是否对应。
LCD的问题,你烧后重启,串口上有无打印?有打印的话,我想你应该烧写:lcd_3.5_4.3.bin。原来的lcd.bin只支持3.5寸LCD。
27.linux内核安全的工作主要干些什么呢,像什么样的公司会招聘这个岗位,需要懂哪些东西,有没大神知道的
答:我对这个无了解。
28.跟着视频学完三期视频,linux的水平到什么程度?以后可以自己完成linux的驱动吗? 另外关于l做底层驱动inux方面的知识都应该掌握哪些?
答:学得好的话,完全可以说有2、3年工作经验了。如果你再换一个板子来练手,把三期视频的例家在新板上都自己写出来,那么一般的LINUX工作基本上没有你不会的了
做底层,需要会看芯片手册、看得懂原理图,然后把第2期学完并且会融会贯通。
29.mini2440支持USB摄像头,是不是所有的USB摄像头都支持的呢,我现在要准备学习视频监控,所有想了解的多一点,不知道mini2440支持的怎么样,那些带有夜视功能的USB摄像头也是不是都支持的呢
答:符合UVC规范的摄像头,都支持。
是否带夜视,只是硬件的性能,跟是否UVC无关的。很多UVC摄像头也带夜视。
30.有同学还记得老师在哪个章节讲过mkdosfs工具的,现在在做块设备驱动程序,一直提示找不到这个命令。
答:网上搜dosfstools_2.11.orig.tar.gz
31.我现在的困惑是:我正在学习韦老师二期的驱动,但是现在老师要我做GPS数据采集,我想的是先学完驱动之后再去完成我老师的事儿,但是我的老师不理解,说采集数据那块和驱动没有关系,叫我直接去做GPS数据采集,我现在又不知道如何做?
答:我想你们用的GPS设备是串口接口的吧?那确实跟驱动无关,你只需要在网上搜搜怎么写串口程序即可。