A. 想买一块ARM板子,初学者,是买ARM9好还是ARM7好 最重要的是资料要全,要细
初学者看你想学什么系统来决定买什么板子。
如果是学习工业控制系统或者uC/OS-II实时系统,建议你买ARM7或者Cortex-M3,这两种的话买三星的S3C44B0X、ATMEL的AT91SAM7S256或者ST公司的STM32的Cortex-M3核的CPU都是可以的,资料都比较全。这些CPU价格便宜,性能比较好,而且工业控制所需的外设一般都齐全。个人推荐STM32。
如果是学习嵌入式linux,建议买ARM9或者ARM11的板子。这方面选择性不太大,一般ARM9就是三星的S3C2440,ARM11就是S3C6410,ARM9的价格在500左右,ARM11在1000以下。建议买ARM11,最爽的ARM11开发板就是LDD6410了,和宋宝华老师的《Linux设备驱动开发详解(第二版)》配套,但是也是性价比最低的。其他的什么飞凌6410、OK6410之类的淘宝上一堆,基本资料都比较重合,也没啥特质化的。
为何建议你买ARM11?因为它可以支持android操作系统。这个系统现在比较火,手机、平板和其他消费电子目前都在用,就业还不错。价格的话也在1000之内,预算足够的话还是一步到位比较好。
如果想学Linux但是预算又不太足的话,可以考虑下国产的SEP4020开发板,东南大学国家集成电路设计中心出的,300-500元左右的ARM720T的CPU,性能还不错,外设也足够丰富,关键是论坛有一堆老师在做技术支持。论坛地址:http://www.armfans.net/forum-20-1.html。可以在预算不太多的情况下考虑下。
个人建议:先买个SEP4020或者Cortex-M3学着(学习Linux的话就是SEP4020,uC/OS-II的话两个都行),等入门OK了,再搞ARM11。当然了,预算充足直接ARM11也行。
B. 想学习Linux 驱动,需要什么知识
首先,接触linux操作系统,在你的电脑上装一个linxu操作系统(建议ubuntu,比
较友好),熟悉经常要用的命令,熟悉环境(建议看“鸟哥的linux私房菜”)。
其次,阅读经典书籍是不可少的,建议先看ldd前四章,大概了解linux驱动的框架
,驱动是做什么的,该如何写驱动,那本书上有一些例子,可以在你的电脑上编译
,执行看看。后面的章节在结合自己的情况而定。
第三,建议阅读ulk(understanding the linux kernel)所有的内容,了解linux
内核的一些基本知识,在心中建立一个框架,不必完全懂,深入了解就好,以后经
常翻翻,受益无穷!
第四,别着急,这才是你真的进入linux驱动的第一步,花点钱买个开发板吧,然
后了解代码的编译,下载,看看板子的datasheet,针对自己感兴趣的深入研究。
建议学习流程,led灯控制---tp---i2c总线-----lcd-----camera----flash----
wifi/bt等。因为这个里面牵涉了甚多内核的子系统(input,v4l2,fb等
),所以可能要多话时间看代码,了解代码的框架,设计的思想等,只要一步一个
脚印,一定会有所成。
第五,因为现在的移动设备大多数都是android的了,所以你就要看看linux
kernel在android的作用,然后往上看看,看看hal层的代码,这些在调试中都是需
要的,如果有兴趣,更加可以看看framework的代码了,学习android一些工作机制
,类似于surfaceflinger,audioflinger等等。。
《linux就该这么学》免费提供最新Linux技术教程书籍,为开源技术爱好者努力做
得更多更好
C. so文件是什么文件
SO文件是Linux下共享库文件,它的文件格式被称为ELF文件格式。由于Android操作系统的底层基于Linux系统,所以SO文件可以运行在Android平台上。
Android系统也同样开放了C/C++接口供开发者开发Native程序。由于基于虚拟机的编程语言JAVA更容易被人反编译,因此越来越多的应用将其中的核心代码以C/C++为编程语言,并且以SO文件的形式供上层JAVA代码调用,以保证安全性。
(3)lddandroid扩展阅读:
so文件使用方法:
(1)动态库的编译。这里有一个头文件:so_test.h,三个.c文件:test_a.c、test_b.c、test_c.c,我们将这几个文件编译成一个动态库:libtest.so。
命令:$ gcc test_a.c test_b.c test_c.c -fPIC -shared -o libtest.so不用该标志外部程序无法连接。相当于一个可执行文件。
(2)动态库的链接这里有个程序源文件 test.c 与动态库 libtest.so 链接生成执行文件 test:命令:$ gcc test.c -L. -ltest -o test命令:$ ldd test执行test,可以看到它是如何调用动态库中的函数的。
参考资料来源:网络—SO(软件编程)
D. Android下怎么使用LDD查看依赖库
Android下没有ldd可以使用,在进行ndk开发的时候,检查库的依赖项特别麻烦。有两个解决方案:
1、将linux的的ldd移植过去。因为android也是基于linux的,所以将ldd移植过去是完全可能的,google一下;
2、现成的。ndk已经提供了工具,在ubuntu下执行locate readelf,会发现有这些输出。
E. 学习linux用什么芯片好2016
首先,无论单片机或者ARM都是属于嵌入式这个概念。对于ARM来说,移不移植linux要看本身产品需求,ARM7的话,一般不会使用linux。主要看CPU的资源。移植linux系统对于后期功能开发更加方便就是,因为linux帮你封装了各种API与资源的管理。其实做linux移植不是非常复杂。正常做开发都是二级开发,也就是说CPU厂商提供了基本的SDK包。从单片机转型做linux,一开始一般做linux驱动吧。做linux驱动,主要是要懂linux框架,上层操作与实际IO接口操作封装了框架而已,基本都是通过注册函数,回调实现而已。我也是做单片机到linux的,转型过来的时候很多都会纠结与上层的操作到实际的寄存器操作,所以先从linux驱动入手在到OS,再到上层应用而已。linux与ucos-ii相比的话,linux集成了功能吧,比如说视频,音频,或者UI更完善太多了,ucos-ii无法利用的系统资源吧。一个ARM芯片用来裸奔就是浪费资源,总的来说就是为了更好地利用CPU的资源。不过现在来说android做嵌入式产品将是一个趋势吧(跟人感觉)好像废话有点多,linux学习的书籍,LDD、ULK、LDK看看,实际开发的时候学的最开,搞个板子,弄个SDK,直接看源码,一个礼拜就可以弄个大概吧,如果只是字符设备混杂设备那就更简单了。。。helloworld哈哈哈
F. Ubuntu 12.04 下安装 openGL 驱动时,究竟做了什么事
Ubuntu 下安装 openGL 驱动的确把我折腾惨了
本人机器是 HP 的使用 i5 的集成显卡
下载了 intel 的 installer (intel-linux-graphics-installer_1.0.1_amd64.deb ),他们不支持Ubuntu 12.04, 只支持 13.x
找了个 ATI x1300 的老显卡,官方的驱动(ati-driver-installer-9-3-x86.x86_64.run)只支持了 Ubuntu 8.x 9.x (让我深感,计算机真是消费品,过时了就用不起来了 )
只好买了一个 Nvidia GT610 显卡,下载官方的 NVIDIA-Linux-x86_64-331.49.run, 顺利装上了
这驱动做了如下的事情:
1) 把驱动装到 Kernel 中 ( 我升级了 Kernel ,又了重装驱动 )
2) 把 /usr/lib/libGL.so 替换为 Nvidia 的(用 ldd 看就知道了),当然要把nvidia 自己的 so 也 到,这几个目录
[html] view plain在CODE上查看代码片派生到我的代码片
ldd /usr/lib/libGL.so
linux-vdso.so.1 => (0x00007fffe91ff000)
libnvidia-tls.so.331.49 => /usr/lib/tls/libnvidia-tls.so.331.49 (0x00007fa1a58c0000)
libnvidia-glcore.so.331.49 => /usr/lib/libnvidia-glcore.so.331.49 (0x00007fa1a30b1000)
libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007fa1a2d7b000)
libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007fa1a2b6a000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa1a27aa000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fa1a25a5000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa1a22a9000)
libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fa1a208b000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa1a5e15000)
libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007fa1a1e87000)
libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fa1a1c81000)
对于 i386 的支持库,放在/usr/lib32中
[html] view plain在CODE上查看代码片派生到我的代码片
ldd /usr/lib32/libGL.so
linux-gate.so.1 => (0xf7718000)
libnvidia-tls.so.331.49 => /usr/lib32/tls/libnvidia-tls.so.331.49 (0xf75f1000)
libnvidia-glcore.so.331.49 => /usr/lib32/libnvidia-glcore.so.331.49 (0xf53ac000)
libX11.so.6 => /usr/lib/i386-linux-gnu/libX11.so.6 (0xf5277000)
libXext.so.6 => /usr/lib/i386-linux-gnu/libXext.so.6 (0xf5265000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf50bb000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf50b6000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf508a000)
libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xf5068000)
/lib/ld-linux.so.2 (0xf7719000)
libXau.so.6 => /usr/lib/i386-linux-gnu/libXau.so.6 (0xf5064000)
libXdmcp.so.6 => /usr/lib/i386-linux-gnu/libXdmcp.so.6 (0xf505d000)
开发 Android 时使用 , Android 使用 i386是从 /usr/lib/i386-linux-gnu 装载
所以要把 lib32 中所有文件复制到 /usr/lib/i386-linux-gnu
3) Xorg相关
Xorg是开源的 Xserver 实现
nvidia 要与Xorg集成的库,放在usr/lib/xorg/moles下面,并改下 /etc/X11 下面的东西
xorg.conf
让 Xorg加载 so
[html] view plain在CODE上查看代码片派生到我的代码片
Section "Mole"
Load "record"
Load "extmod"
Load "dbe"
Load "dri2"
Load "glx"
EndSection
装载 /usr/lib/xorg/moles/extensions/ 下面的 libglx.so, libdri2.so 等
让 Xorg 加载 nvida 驱动
[html] view plain在CODE上查看代码片派生到我的代码片
Section "Device"
Identifier "Card0"
Driver "nvidia"
BusID "PCI:1:0:0"
EndSection
附带转帖
Ubuntu通过重新生成/etc/X11/xorg.conf文件来调整分辨率
http://blog.chinaunix.net/uid-25909722-id-3019407.html
1. Ctrl+Alt+F1 , sudo service gdm stop
2. sudo Xorg -configure (生成文件 ~/xorg.conf.new)
3. sudo service gdm start
4. mv ~/xorg.conf.new /etc/X11/xorg.conf
5. gtf 1280 1024 60 -x
6. 然后将上一步中gtf命令生成的内容:
Modeline "1280x1024_60.00" 108.88 1280 1360 1496 1712 1024 1025 1028 1060 -HSync +Vsync
插入到/etc/X11/xorg.conf中:
Section "Monitor"
Identifier "Monitor0"
VendorName "Monitor Vendor"
ModelName "Monitor Model"
Modeline "1280x1024_60.00" 108.88 1280 1360 1496 1712 1024 1025 1028 1060 -HSync +Vsync
EndSection
重新启动X。搞定。
如果不想生成xorg.conf文件,并且只想临时的调整分辨率,那么可以按照如下方法实现:
cvt 1280 1024
sudo xrandr --newmode "1280x1024_60.00" 109.00 1280 1368 1496 1712 1024 1027 1034 1063 -hsync +vsync
sudo xrandr --addmode VGA1 "1280x1024_60.00"
sudo xrandr --output VGA1 --mode "1280x1024_60.00"
就可以临时的调整分辨率到1280x1024.
G. 嵌入式技术需要学习什么
嵌入式系统软件工程 方法实用技术及应用,免费下载
链接:https://pan..com/s/10No3IypKyLg01bV4T9b22w
《嵌入式系统软件工程:基础知识、方法和应用》系统地阐述嵌入式系统软件工程所涉及的过程、方法、内容,以及在典型工业领域中的应用。全书内容分为两大部分:第一部分介绍嵌入式系统软件工程方法论,主要包括嵌入式软件的开发过程(需求工程、软件和系统体系结构、编程和测试等内容),开发和测试中所采用的标准,与安全性相关的软件系统的准入,以及嵌入式软件所涉及的法律问题:第二部分介绍嵌入式系统软件在汽车领域、轨道交通领域、航天领域、医疗器械、工业自动化、通信系统中的应用,在每个应用领域重点介绍具体应用领域的一些特定需求、技术和限制条件,以及它们对于嵌入式系统软件开发过程的影响。
H. 做Android驱动开发需要了解哪些方面的知识
总线知识,比如PCI、USB总线。芯片知识。驱动其实就是对设备上一些寄存器的配置、CPU与设备本身的通讯以及对不同命令的处理。