结合Yocto Qemu与Eclipse单步调试开发Linux Kernel

使用说明 在以前的博客中说明过使用Qemu + BuildRoot来构建一个虚拟的嵌入式开发平台, 还写过使用Yocto + Qemu来构建一个Cortex-A9的嵌入式开发调试平台. 同时在很久以前也写过使用Eclipse + JLINK来调试ARM9. 而在工作学习中,有时候, 对内核源码的研究中, 需要单步对linux内核跟踪调试, 且大部分是关注与内核中某些组件的实现, 例如MM, Binder驱动, 这个时候直接使用Qemu + Eclipse来调试与开发就比使用硬件方便快捷得多了. 那么这篇文章中将使用:

Continue reading »

OpenWRT中使用mpd作为音频Server及其使用

说明 MPD可以播放音乐与streaming Radio,可以用于娱乐用。其官网的说法为:

即MPD是CS架构的Daemon端。 接下来我们将在iMX6UL上面使用MPD, 并在手机与Ubuntu等上面使用其Client来控制与播放音乐。 ALSA验证声卡发声 要完成音乐的播放,首先iMX6UL需要可以播放声音。 iMX6UL使用的Codec是WM8960, 这个和TQE9使用的是一样的。 在播放之前,我们先查看声卡是哪个:

首先需要确定ALSA识别了哪些声卡,然后再确定声卡的设备Index, 例如这里面WM8960不是Card0,所以如果直接默认使用aplay来播放,那么就会出错。 当然启动的时候也有:

确定设备Index后,我们需要一个WAV文件来播放。 直接使用MP3来convert一个: 然后我们使用wavinfo查看一下wav文件的属性:

Continue reading »

【EVB-335X-II试用体验】 基于Yocto的嵌入式的敏捷项目开发:以电子相册为例

EVB 335X-II有一个800*480的屏幕,如果放在家里,那么我们可以做一个电子相册,在家里放着的时候,可以自动播放图片幻灯片。这篇博客,我们将使用开源方案以及Yocto来构建和完成这个小项目。 方案选择我们可以自己使用Qt/C++甚至Python,C来写一个直接操作Framebuffer,并针对不同size的图片进行适配和Zoom In/Out缩放处理,还需要对不同图片的加载进行判断,同时如果我们还希望在图片上面显示字的话,还需要一些叠加处理,然后我们还需要进行交互的API暴露,例如让user可以查看Next与Previous Picture; 网络支持;缩略图显示支持;网络图片支持;透明显示;放大缩小支持;EXIF信息解析与显示与叠加;只显示特定特征的图片;抗锯齿。 可以看到,本来想着是一个简单的电子相册,如果想去做好,并不容易。需要考虑的方面很多。 这里我们使用feh这个开源的方案。 feh有诸多的优点,feh使用imlib2并基于X11来显示,同时支持插件化配置,还支持网络。 其官方列出的features有: Various operation modes: Slideshow: Show all files in or below

Continue reading »

【EVB-335X-II试用体验】 Yocto环境的建立及Rootfs的构建与使用:QT与触摸屏(3)

前面我们已经构建好了基本的Rootfs,并且可以启动起来的,但是我们也会发现这个roofs非常的小,相当于一个busybox搭建的一样,当然这个无法满足我们的需求,因此我们下面将开始扩展我们的rootfs,添加一些工具让我们可以方便的开发。 显示问题 使用前面的方法启动后,我们会发现在uboot阶段是有图片的,但是在linux之后却没有发现有boot logo,然后启动之后我们也没有发现有/dev/fb0这个设备,同时也没用在dmesg中找到fb相关的内容,而device driver中却已经配置好了驱动: 因此可以推断出我们的驱动并没有probe,那么就可能是我们的device没有和driver match,或者根本就没有加载这个驱动,然后我们注意到在内核中的启动参数中有一个lcd相关的参数: 当然也可以认为那个consoleblank=0也是相关的,关于这个consoleblank,其实是这样子的: 我们在内核中配置了使用console on framebuffer,那么过10分钟,就会自动关闭掉这个console,其实就相当于关闭掉了这个屏幕,所以这里将其设置为0是为了不让屏幕在10分钟之后关闭,变成黑屏。 因此我们改一下bootargs,重新启动: set ipaddr 192.168.1.111;set serverip 192.168.1.100 set bootargs ‘console=ttyO0,115200n8

Continue reading »

【EVB-335X-II试用体验】 Yocto环境的建立及Rootfs的构建与使用(2)

在前面的文章中,我们已经使用Yocto构建出一个Rootfs,但是因为WatchDog的缘故,启动没有多久就重启了。下面我们来解决这个问题。 WatchDog的Disable 我们既可以在Rootfs启动后定期喂狗,也可以直接在kernel中disable Watchdog,在开发初期我们选择在内核中直接去掉比较快。 内核配置 使用make menuconfig来配置,结果出现了错误: 这个明显是因为确实Libary的问题,这个缺少的是libreadline,因此安装即可: sudo apt-get install libreadline5-dev 然后在menuconfig中,我们可以查到Watchdog的位置,因此我们找到disable即可: 然后重新编译,再次测试发现还是会重启。看起来是uboot中就开启了,然后内核中还是需要去关掉才行,或者直接在uboot中需要关闭。 然后将板子开启到uboot中,停留一会发现确实会自动重启,因此可以确定是uboot中的开启了watchdog。然后查看用户手册,可以看到其Watchdog电路如下: 因此我们只需要短接J3即可。 如果想在uboot中disable,那么可以将下面几个宏去掉: 然后重新编译烧写即可。 暂时我们就先这样子做,以后我们将会在Yocto中添加代码来对应此问题,对于如何喂狗可以参考官方给的代码,代码位于: test_code/watchdog/main.c

Continue reading »

【EVB-335X-II试用体验】 u-boot与kernel的编译以及本地repo的建立

解压了网盘下载后的压缩包后,找到了doc目录,但是在这个目录中,没有找到uboot与kernel的编译说明。后来再找才发现是在nand的doc子目录中。下面就说明一下,各个make过程中都做了点什么,方便大家对整个编译过程的理解。 内核与u-boot的编译 生成配置文件 配置如下: 可以看到有里面有说他DRAM的宏定义 这些宏的定义位于boards.cfg中: 然后makefile会生成下面整个头文件: 可以看到整个头文件里面的各个宏就是前面boards.cfg中定义的。这里面有board位置,board的名字,因此这样子makefile就知道该去编译哪个board里面的文件了。 最后我们再make 即可生成: SPL u-boot.img 这两个文件,分别为第二阶段与第三阶段的bootloader,第一阶段的为ROM Code。 内核的编译 内核中直接make uImage即可。 repo的建立 板子自带的内核版本是3.2,没有试用device tree,但是但是完善。我们后面也会直接使用官方的uboot与kernel。

Continue reading »

【EVB-335X-II试用体验】 Yocto环境的建立及Rootfs的构建与使用

前面的文章中已经建立起kernel与bootloader的repo,这篇开始,我们将先建立Yocto编译环境,并编译出基本的rootfs。 Yocto基本meta的获取 我们需要好几个meta与poky 首先需要保证至少有65GB的Free磁盘空间或者更多,创建一个目录: mkdir Yocto 然后clone各个meta与poky 第一个是meta-bbb: git clone git://github.com/jumpnow/meta-bbb -b original/jethro 然后是poky与其他的: git clone git://git.yoctoproject.org/poky.git -b original/jethro git

Continue reading »

【EVB-335X-II试用体验】 上手试用与资源使用

开箱 收到快递后,拆开的第一感觉是,果然是工控版,包装不错 可以看到各种器件齐全,包括网线,串口线以及EXT IO的接插件,以及电源,开箱即用,如果你已经有了USB转串口线的话。 启动 启动之前,需要连接串口,电源线,上电后的样子如下: 启动之后,自动启动了一个QT程序,进行各个设备的自检,方便大家确定板子的硬件情况。 软件资源 在下载下来的光盘中,可以看到有从Bootloader,kernel,到Rootfs的SW,其中因为默认是从nand启动的,所以uboot与kernel放在了nand目录中,而rootfs则放在了rootfs中,可以看到,其中rootfs是使用buildroot来编译的,因此也算是一种快捷的构建方式,同时,也有测试工具。 硬件资源 让人非常印象深刻的是有一个底板设计指导手册: 这个对于大家的实际应用设计有很好的指导作用。 Uboot 一般uboot看看环境变量就比较清晰板子的启动等情况了: U-Boot# pri arch=arm baudrate=115200 board=com335x board_name=com335x

Continue reading »

Yocto tips (20): Yocto中qemu模拟器的使用,以zynq Cortex-A9为例

在以前的文章《使用Buildroot与Qemu学习ARM linux IIC驱动》中,写到过使用qemu来模拟使用ARM Linux,那个时候借助的是buildroot,这次我们使用Yocto来做同样的事情。 优点 使用Qemu的好处在于,当我们在开发Userspace的程序时,可以在没有硬件的情况下完成测试。 同时不像以前一样我们需要自己去编译qemu,这次我们使用Yocto编译出来的native qemu来模拟。省去了我们手动编译可能出现的问题。 选择 这里的选择指的是,我们在local.conf中指定MACHINE变量的值。我将其分成两种: 1. 默认的qemuarm 以前我一直使用这个,但是这个模拟的是一个ARM9的处理器,各种外设功能不足,我们希望可以模拟一个更高ARM架构的SoC。 2. Xilinx的zynq-9:xilinx-zynq-a9 在Qemu的模拟中,据个人有限经验对不同的板子的模拟情况的了解,zynq在Qemu中有较好的支持。同时xilinx对此也有不少的文档,同时xilinx的一些板子的支持属于Qemu默认的测试与支持Machine,因此选择Xilinx的板子来模拟比较合适。 同时,我们关注的是ARM相关,因此使用Cortex-A9比较好,对此,我们选择xilinx-zynq-a9。 在我们的Host PC中如果安装了qemu-system-arm,那么我们可以看到其支持的板子里面是有这个板子的:

Continue reading »

Yocto i.MX6 (TQIMX6) (04) : 使用mjpg-streamer做一个WebCam Server

libjpeg的编译 下载后直接对configure指定即可。或者使用Yocto编译,参考我的其他与Yocto相关博文。 mjpg-server的编译 mjpg-streamer已经很老了,且sourceforge中的下载文件,默认是deb格式的,因此需要找到对应的源代码 下载地址:http://sourceforge.net/projects/mjpg-streamer/files/mjpg-streamer/Sourcecode/ 编译 下载之后,解压,并将所有Makefile中的CC变更成接受Preset的格式,即将:

变更成:

为了防止少修改,还可以用grep看看都有哪些文件有:

结果如下: 对于修改Makefile,可以使用sed与awk组合完成,命令如下:

然后再使用grep看看文件是否都完成了变更。 将mjpg-streamer的库output文件放到target上 lib库so文件 直接在target中使用scp或者其他方式放进去即可,下面是一个范例:

Continue reading »