首页 > 代码库 > 韦东山yy公开课笔记(2)--各种杂的问题

韦东山yy公开课笔记(2)--各种杂的问题

1. 编译器的版本和glibc库有对应关系吗,如何查看glibc的版本(glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc),编译器是不是只带glibc被编译生成的 .so 文件,如果自制系统调用的话是不是还要下载glibc然后重新编译
答:一般来说制作编译器的时候就会选定glibc,所以你得到的编译器里面含有glibc的库,既有so文件,也有.a文件。编译器和Glibc都在更新的,新编译器一般不能使用过老的glibc。但是它们之间的版本关系,我也不了解。
    自制系统时,一般直接复制编译器自带的lib就可以了,可以参考第1期视频的根文件系统部分。

 

2. 在中断处理函数里主要做什么?有哪些不适合在中断处理函数里处理?希望可以举个例子
答:中断处理函数就是“尽快地处理中断事件”。太过耗时的、不是很紧急的事情,不要放在中断函数里。比如网卡中断程序,它只是尽快地把数据从网卡上读入内存,并不做进一步的分发处理。这后续的处理,是通过触发一个工作队列或是唤醒内核线程来做的。


3. 老师怎么和usb-hid设备通讯实现读写设备 任意字节长度?内核hiddevhidraw能实现任意字节读写吗?还是自己写一个方便些?思路是怎样的?
答:硬件上肯定不支持任意长度的读写,驱动里一般都会根据硬件要求发起多次传输。
对于hiddev,它根本不支持write操作;对于hidraw,它的写操作依赖于其他驱动。所以你还是自己写比较方便。主要的难点在于USB设备的概念:地址、Endpoint、一次传输的长度,把这些都弄清楚了,你可以用libusbAPP即可,不需要写驱动。如果非要写驱动,也只是在驱动的readwrite里启动数据传输,框架就是一个简单的字符设备驱动,数据传输方面可以参考第2期输入子系统里对鼠标的操作。


4.对于调试来说,目前使用什么工具最合适,对于uboot使用print太过麻烦吧,而且烧写程序过于麻烦。老师,我看第二期视频,发现输入子系统和总线设备驱动模型有点乱,老师能说说他们之间的联系和区别吗?
答:我是使用print,这方便;你事先分析了程序,需要加打印的地方不会太多。只有碰到疑难问题无法分析时,我才用OPENJTAG
    输入子系统和总线设备驱动模型一点关系都没有,“总线设备驱动模型”可以认为只是一个技巧:你定义一个device,再定义一个driver,它们的名字相同时,drvierprobe函数就被调用──它只是用来把驱动程序分为2个文件,一个存放硬件相关的代码,另一个存放跟硬件关系不大的代码。

 

5.是否所有的ARM芯片都是上电之后自动将NAND的前4K拷贝至芯片本身的内存
答:只有三星的某几款芯片是这样。支持NAND启动的芯片,实质上也有这一个过程:片上固化的程序读取NAND到内存中,然后启动。

 

6.linux启动代码中物理地址到虚拟地址是怎么建立关系的
答:原理性的东西,可以看第1期的MMU实验,它是裸板;在Linux里怎么建立映射,我也没有去深究过。

 

7.不好意思 链接地址还是不太懂。
答:把第1期视频的程序从LED开始练习一下,很快就明白了。

 

8.用摄像头采集数据 如何实现录像的功能
答:一般是先压缩,然后写入文件。


9.毕业班视频是看完第二期再看吗
答:毕业班视频里BOOTLOADER部分,可以看完第1期视频后就看;其他部分是看完第2期再看。
    毕业班视频用来检验第12期的学习成果。

 

10大学里怎么提高自己的项目经验,因为不是相关专业的,只是凭借自己兴趣, 也没有相关项目
答:可以自己构思一个产品,然后去实现它。比如用开发板实现某个功能。


11.为什么反汇编里显示0x56000000是立即数 直接存入寄存器,而0x123以后 反而成据?
答:看看这篇文章:http://bbs.chinaunix.net/thread-2317716-1-1.html


12.韦老师,请问下为什么SP指针要从4092处开始压栈而不是0+4地址处开始呢?
答:0开始处有代码啊,你在0地址处压栈被就破坏程序了。
    SP是向下增长,还是向上增长,其实可以通过编译选项来指定。只是我们经常使用向下增长。

 

13.PC指针和SP指针的区别
答:CPUPC所指向的内存读取数据,这个数据作为指令来执行;
    SP指向一块空闲的内存,这块内存用来暂时存放数据,这些数据是程序执行过程中生成的,比如局部变量。

 

14.老师能否讲讲Uart_stdio的具体实现 之前只是一笔带过 感觉看不到 里面的原理
答:基本上就是一个变参函数,我也不太懂,只是移植内核的printk源码。

 

15.有些ARM9 CPU不止有内部RAMROM,UBOOT如何改写呢
答:这个问题太方泛了不好回答,简单地说:UBOOT的目的是读取并启动内核。实现这个目标的过程中,涉及哪些硬件就去操作哪些硬件。
    大概的框架在毕业班视频“自己写bootloader”学到。

 

16.老师,内核精景分析这本书比较早了 现在还有什么研读的必要吗?写驱动需要
对内核了解到什么程度?
答:是比较早,但是原理一直没变过。它可以作为书桌手边上的工具书,对某块内容想深入理解时,就翻翻它。这书涉及的内容都讲得很深入、细致。


17.老师对于嵌入式培训怎么看?尤其哪些动不动就10000块,上34个月课程的机构?
答:去上培训班,我个人认为只有2个好处:自制能力不强的人可以得到一个学习气氛,有面试机会。
    单就学习知识来说,培训班的效果没有看视频好。


18.视频监控项目实现手机+PC同传输视频信息,论坛有人发布QT精简版,能发布带录吗
答:发布“带录”是什么意思?



19.openjtag+ok6410,擦除nand命令失败
所有连线连好后,连接open ocd,然后telnet。红色为敲入的命令!但是显示不成功!(如图)

file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps3CE0.tmp.png
答:openocd的命令行对MLC的支持并不完善,换句话说在openocd不支持MLC NAND。


20.nandflash第0块损坏了 怎么办
答:厂家保证它不会坏,要真坏了,① 它就不能作为启动芯片,即板子只能使用NOR启动。②换一个NAND芯片吧



21.新人报道,在学习东山哥的ok6410的裸板程序,第20irq的裸板程序,直接copy东山哥的.bin文件,发现串口上出现的字符是乱码,不知道哪位大虾遇到过这种问题没,上个图,个晚上,没弄懂。

file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps3CE1.tmp.png
答:我没有碰到过,一时间也不知道原因。你可以精简程序,把代码尽可能减少,然后找原因。


22.像图一这样写,不能正常初始化2440存储管理器。其它不变换成图二这种写法,就成成功初始化2440存储管理器。请问问题出在哪里?提前谢谢
不能正常初始化

 

file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps3CE2.tmp.png

 

能正常初始化:
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里面自己出错了怎么办?
答:为了精简程序,我没有理会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,不就是700M了吗?


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 的裸板测试程序 可以 发给我吗 ,不胜感激!
404999641@qq.com

 

答:没有OV7740的裸板测试程序。

 

25.板子mini2440 屏x35,把lcd的驱动程序系在进去后刚开始会显示一行字“
Please press Enter to activate this console. ”过几秒钟之后就成了绿屏  有谁遇到过这种现象吗?
答:绿屏?我倒是没有碰到过,你在/etc/inittab里把tty0tty1那行删除掉试试,然后重启系统应该可以看到LCD没有文字显示。启动后,可以用 echo hello > /dev/tty1 测试LCD

 

26.请问我按照第0课第2节用u-boot烧裸板程序lcd.bin,烧写正常,但拨到nand运行时,屏上只显示一些色条,是怎么回事,烧led_on.bin也是灯不亮,但烧leds.bin又正常,灯轮流闪,这是怎么回事

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设备是串口接口的吧?那确实跟驱动无关,你只需要在网上搜搜怎么写串口程序即可。

韦东山yy公开课笔记(2)--各种杂的问题