【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 »

Android JNI DETECTED ERROR IN APPLICATION的解决

在APK中使用了jni 的so shared library,运行的运行的时候出现如下的错误:

从里面可以看到,其应该到

中去调用对应的native函数,但是jni反过来查找java class的时候不对:

因此可以判断是jni代码中写的查找被调用的java class path不正确。将其更正即可。

Continue reading »

S5P4418与S5P6618的Android boot.img的解压与压缩, Sparse ext4文件系统

文件类型 4418的boot.img是由kenrel + uramdisk组成的ext4 并且是sparse形式的image, 这里面的sparse是紧凑的意思,即将ext4文件系统中的内容为zero的地方“压缩”起来, 从而减少size。 制作 这种类型的image,使用make_ext4fs, 并使用-s选项制作而成,例如在4418中(其他Android或者文件系统也是类似),命令如下:

  其中-a为lable,最后的参数是制作到文件系统中的目录,因此,制作完成后,可以看到file工具识别到的是data 数据文件:

转化 对此我们可以使用simg2img工具来转换成标准的ext4文件系统的文件:

此时file工具即可识别:

Continue reading »

原生Android系统的第一次开机google验证的解决

网络访问问题 作为Android系统开发者,编译AOSP是无法避免的,下载Nexus系列的AOSP image来使用也是无法避免的。如果是我们自己编译AOSP的话,我们可以选择eng版本,从而省去这些验证步骤,同时也没有各种权限问题,当然SeLinux还是有问题的,但是我们可以很容易的关闭。 如果我们需要下载,或者使用product版本的aosp image,那么一般在第一次开机后,Android系统需要连接google网站,然后让我们选择登录google帐号,如果无法连接到google,那么其实我们是无法进入系统的。因此问题就在于,如何连接到google。 方法 方法有多重,根据个人的开发环境各异,但是一般不外乎下面这两种: 1. 路由器直接有SS可以访问网络 2. 使用代理 如果路由器已经可以访问google,那么也就容易了,但是对于大多数开发者而言,使用第二种方式较为实用和普遍也非常的容易实现。 准备 要使用第二种方式,我们需要下面这些东西: 1. Wifi热点,笔记本自带的一般就可以,也可以使用路由器 2. SS帐号密码,可以到淘宝卖SS的地方找一个试用的来暂时使用,最好是自己的SS Server 步骤

Continue reading »

为小米4与小米3 Mi3 Mi4编译Cyanogenmod 12.1与13.0 (CM12与CM13) 的步骤以及错误解决

小米4是Cyanogenmod官方支持的Device,所以编译无需我们做Device specific适配,我们只需要提取代码(Android 与Kernel),获取proprietary binary files即可编译。  小米4以及小米3的设备名字都是cancro,CM对于这两款设备的WIki位于: https://wiki.cyanogenmod.org/w/Build_for_cancro 步骤与错误解决 1. breakfast VS proprietary files 先获取proprietary binary files然后再breakfast,否则会出现错误。 2. 提取proprietary file的错误解决 提取有两种方法:

Continue reading »