2014-03-17 17:01:33 crystal01984 阅读数 7194
jdk6下载:
32位:jdk-6u25-linux-i586.bin
64位:jdk-6u25-linux-x64.bin
下载地址:http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html#jdk-6u25-oth-JPR


jdk7下载:
下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
2015-06-08 22:09:21 u010346967 阅读数 1214

                                                                       疯雨-版权所有,转载请注明【http://blog.csdn.net/u010346967】

1.这里为什么选nfs文件系统呢?

     在产品开发阶段,因为nfs根文件系统并不需要编译进内核,方便调试。


2.制作根文件系统需要用到BusyBox

  busybox 下载地址:www.busybox.net

解压进入busybox目录:

root@crazyrain:/home/share# tar xjf busybox-1.20.2.tar.bz2 
root@crazyrain:/home/share# cd busybox-1.20.2


3.修改Makefile,指定交叉编译工具链和编译体系arm

root@crazyrain:/home/share/busybox-1.20.2# vim Makefile

CROSS_COMPILE ?=  修改为   CROSS_COMPILE ?= arm-linux-
ARCH ?= $(SUBARCH)  修改为   ARCH ?= arm

4.进行busybox配置

root@crazyrain:/home/share/busybox-1.20.2# make menuconfig

  Busybox Settings  --->   General Configuration  ---> [*] Don't use /usr 

/*不选上的话,会安装到系统目录的/usr下 破坏系统文件*/


5.编译

root@crazyrain:/home/share/busybox-1.20.2# make
root@crazyrain:/home/share/busybox-1.20.2# make install
完成安装后 当前文件夹下多了_install文件夹,这就是最终生成的busybox文件系统。

root@crazyrain:/home/share/busybox-1.20.2# cd _install/
root@crazyrain:/home/share/busybox-1.20.2/_install# ls
bin  linuxrc  sbin


接下来构建一个最小的根文件系统:最小根文件系统需要哪些文件呢?

一个最小根文件系统必须的项:

 /dev/console   这个在内核启动时打开:sys_open((const char __user *) "/dev/console", O_RDWR, 0) 

 /dev/null       当不设置标准输入输出标准出错时,就会定位到/dev/null

 init本身,即busybox

 /etc/inittab配置文件  init进程配置文件,用来创建其他进程 inittab配置文件中指定的应用程序或脚本

 相应的库(如glibc库)


6.创建etc/inittab文件

root@crazyrain:/home/share/busybox-1.20.2/_install# mkdir etc
root@crazyrain:/home/share/busybox-1.20.2/_install# vim etc/inittab
::sysinit:/etc/init.d/rcS
::askfirst:-/bin/sh
::shutdown:/bin/umount -a -r

7.创建etc/init.d/rcS文件

root@crazyrain:/home/share/busybox-1.20.2/_install# mkdir etc/init.d


root@crazyrain:/home/share/busybox-1.20.2/_install# vim etc/init.d/rcS
添加想要自动运行的程序:

#!/bin/sh
mount -a #挂载在etc/fstab中配置的挂载项
mkdir /dev/pts        #支持外部网络连接的虚拟终端telnet
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug #热插拔
/sbin/mdev –s    #在dev目录下生成内核支持的所有节点

8.由于使用了mount -a 必创建etc/fstab文件

root@crazyrain:/home/share/busybox-1.20.2/_install# vim etc/fstab
# device    mount-point    type        options    dum        fsck        order
proc          /proc        proc        defaults   0           0
tmpfs         /tmp         tmpfs       defaults   0           0
sysfs         /sys         sysfs       defaults   0           0
tmpfs         /dev         tmpfs       defaults   0           0
procLinux 内核提供了一种通过/proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口.
Sys: sysfs 文件系统总是被挂载在 /sys 挂载点上这里sysfs文件系统是为了支持mdev。为了减少写入flash。将dev目录挂载为tmpfs使写入操作在内存中。

9.busybox运行mdev创建所有设备节点之前,init进程需要dev/consoledev/null设备节点

root@crazyrain:/home/share/busybox-1.20.2/_install# mkdir dev
root@crazyrain:/home/share/busybox-1.20.2/_install# mknod dev/console c 5 1
root@crazyrain:/home/share/busybox-1.20.2/_install# mknod dev/null c 1 3

10.创建根文件系统其他目录

root@crazyrain:/home/share/busybox-1.20.2/_install# mkdir proc mnt tmp sys root

11.拷贝glibc库到lib目录

root@crazyrain:/home/share/busybox-1.20.2/_install# mkdir lib
root@crazyrain:/home/share/busybox-1.20.2/_install# cp /usr/local/arm/4.4.1/arm-none-linux-gnueabi/libc/lib/*so* lib/







2015-06-12 16:54:36 r_Jimy 阅读数 730

修改/etc/inittab

去掉原来login语句,改为如下:

console::respawn:-/bin/sh 

即可实现自动登陆


2018-11-05 16:18:57 weixin_39465823 阅读数 735

1,首先下载arm-linux-gcc安装包,http://arm9.net/download.asp

解压:tar -zxvf  *.tar.gz

2,修改环境,使得系统能够识别arm-linux-gcc,

方法1:##sudo vi /etc/environment

方法2:##sudo vi /etc/bash.bashrc

方法1或者方法2,在里面添加,export PATH=$PATH:/home/xxx/bin,这里的xxx就是刚刚下载解压的bin文件夹的路径,

然后##source /etc/environment或者##source /etc/bash.bashrc,使得文件生效,

3,测试,##arm-linux-gcc -v,就可以了。

可能遇到问题,/bin/.arm-none-linux-gnueabi-gcc: not found,

那是因为系统和编译器的位数不一样,系统是64位的,

##sudo apt install lib32z1 lib32ncurses5就可以了。

参考:https://blog.csdn.net/liuquancheng/article/details/9009345

Samba服务器

嵌入式开发需要频繁交互文件在linux和windows上,

传统方式: 要通过filezilla这个工具登陆,但是上传下载比较麻烦,所以安装samba,

安装方法:

1,安装samba: apt-get install samba 一路y,

2,安装完成后,备份samba配置文件,

3,打开配置文件 vim /etc/samba/smb.conf,

4,重启服务命令: service smbd restart && service nmbd restart输入两次密码即可,

5,把已经有的账户添加到smaba里并设置新密码,我的账户是aaa,输入命令:Sudo smbpasswd -a aaa,

6,在虚拟机中创建目录share 权限777,位于/home/share,这个就是我们要和windows交互的linux文件夹。

2017-06-12 17:36:05 fengyuwuzu0519 阅读数 3780

欢迎扫码关注微信公众号:柒零玖嵌入式,更多嵌入式软硬件相关分享!

       

    目前网上关于QT5.6的移植教程还不完善,本博客详细说明QT5.6.0移植到嵌入式linux单板的详细步骤。并将移植好的分享在GitHub上。

一、实验环境

(1)编译工具链

arm-Linux-gcc-4.4.3.tar.gz

(2)linux系统

linux-3.4.2

(3)虚拟机

16.04.1-Ubuntu

(4)busybox

busybox-1.22.1.tar.bz2 

(5)tslib                     

 tslib-1.4.tar.gz

(6)qt5.6 源码

qt-everywhere-opensource-src-5.6.0.tar.gz

(7)S3C2440开发板

嵌入式板子是自己在JZ2440的基础上制作的。完全兼容JZ2440。


二、搭建ubuntu虚拟机系统

https://www.ubuntu.com/index_kylin 下载16.04版本的ubuntu镜像文件。 

参考《百问网精智JZ2440开发板4.3寸LCD版使用手册》安装虚拟机里常用的软件。

①更新软件源

$ sudo apt-get update

②安装、配置、启动 ftp 服务。

执行以下命令安装,安装后即会自动运行:

$ sudo apt-get install vsftpd

修改 vsftpd 的配置文件/etc/vsftpd.conf,将下面几行前面的“#”号去掉。

#local_enable=YES

#write_enable=YES

上面第一行表示是否允许本地用户登录,第二行表示是否允许上传文件。

修改完华之后,执行以下命令重启 ftp 服务:

$ sudo /etc/init.d/vsftpd restart

③安装、配置、启动 ssh 服务。

执行以下命令安装, 安装后即会自动运行:

$ sudo apt-get install openssh-server

它的配置文件为/etc/ssh/sshd_config,使用默认配置即可。

④安装、配置、启动 nfs 服务。

执行以下命令安装,安装后即会自动运行:

$ sudo apt-get install nfs-kernel-serverportmap

它的配置文件为/etc/exports,在里面增加以下内容,以后将通过网络文件系统访问

/work/nfs_root 目录:

/work/nfs_root *(rw,sync,no_root_squash)

修改完华之后,执行以下命令重启 nfs 服务:

$ sudo /etc/init.d/nfs-kernel-serverrestart

⑤安装、配置 tftp 服务软件:

$ sudo apt-get install openbsd-inetdtftpdtftp

打开/etc/inetd.conf 文件,里面有一行如下:

tftp dgram udp wait nobody /usr/sbin/tcpd/usr/sbin/in.tftpd /srv/tftp

把“nobody”改为“root”,把“/srv/tftp”改为“/work/nfs_root”,表示 tftp 目录。

⑥使用以下命令安装基本的开发环境:

$ sudo apt-get install build-essentialtexinfo

⑦安装工具 bison、flex,它们分别是语法、词法分析器:

$ sudo apt-get install bison flex libtoolautomake autoconf

⑧安装 C 函数库的 man 手册,以后就可以通过类似“man read”的命令查看函数的用法了:

$ sudo apt-get install manpages-dev

三、安装交叉编译器

(1)解压

tar zxvf arm-linux-gcc-4.4.3.tar.gz  -C  /

(2)查看解压路径

ls  /opt/FriendlyARM/toolschain/4.4.3/bin

(3)修改环境变量

sudo vi /etc/environment

改为:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/FriendlyARM/toolschain/4.4.3/bin"

(4)重启系统

reboot

(5)查看版本

arm-linux-gcc –v

gcc version 4.4.3 (ctng-1.6.1)

四、编译内核

编译过程中可能出现各种错误,原因是虚拟机少安装了环境,其中一些问题在如下博客中总结:http://blog.csdn.net/fengyuwuzu0519/article/details/72834451

实验的时候,使用的是我按毕业班自己移植的linux3.4.2,下面说一下按毕业班的资料,如何产生所需内核

(1)解压内核目录

  tar jxvf linux-3.4.2.tar.bz2

(2)打补丁

patch -p1 < ../ linux-3.4.2_100ask.patch

(3)复制config文件

cp config_ok  .config

(4)配置

make menuconfig

(5)修改分区

修改linux-3.4.2/arch/arm/mach-s3c24xx/common-smdk.c的smdk_default_nand_part函数,内核分区改为4M

同时修改uboot中include/configs/smdk2440.h中MTDPARTS_DEFAULT 使内核分区为4M。

(6)编译产生uImage

make uImage

五、制作文件系统

1、解压
  tar jxvf busybox-1.22.1.tar.bz2
2、配置
  make menuconfig
  Busybox Settings -> 
  general configuration ->
    [*] don't use /usr                  //选中它 否则会破坏虚拟机
  build options->
    cross comliler prefix = arm-linux-        //选择交叉编译工具
  installtion options->
    busybox installation prefix = /work/my_rootfs //指定安装路径
3、编译&安装
  mkdir -p /work/my_rootfs                //安装路径
  make
  make install
  cd /work/my_rootfs
  ls                 //查看是否安装成功
  编译安装完毕之后,我们的文件系统就生成在 /work/my_roofs 目录下了
4、创建 /etc/inittab
  mkdir -p /work/my_rootfs/etc
  vi /work/my_rootfs/etc/inittab
  # /etc/inittab
  # 启动脚本/etc/init.d/rcS
  ::sysinit:/etc/init.d/rcS
  # 启动 shell
  ::askfirst:-/bin/sh
  # 重启关机前 卸载文件系统
  ::ctrlaltdel:/sbin/reboot
  ::shutdown:/bin/umount -a -r
5、创建 /etc/init.d/rcS
  mkdir -p /work/my_rootfs/etc/init.d
  vi /work/my_rootfs/etc/init.d/rcS
  # 这是一个脚本文件,用/bin/sh解析
  #!/bin/sh
  # 挂载文件系统
  mount -a
  # 使用内存文件系统
  mkdir /dev/pts
  mount -t devpts devpts /dev/pts
  echo /sbin/mdev > /proc/sys/kernel/hotplug
  mdev -s
  # 设置IP
  #/sbin/ifconfig eth0 192.168.1.17 #nfs不需要
  # 挂载 /etc/fstab 中的文件系统
  mount -a
  exec /etc/rc.local
6、创建rc.local
  vi /work/my_rootfs/etc/rc.local
  #!/bin/sh
  .  /etc/profile  //注意.后边有个空格!
7、创建/etc/fstab
  vi /work/my_rootfs/etc/fstab
  # device mount-point type options dump fsck order
  proc  /proc proc defaults 0 0
  sysfs  /sys sysfs defaults 0 0
  tmpfs /tmp tmpfs defaults 0 0
  tmpfs /dev tmpfs defaults 0 0
8、构建 /dev 目录
  mkdir -p /work/my_rootfs/dev
  cd /work/my_rootfs/dev
  sudo mknod console c 5 1
  sudo mknod null   c 1 3
9、创建其它目录
  mkdir proc mnt tmp sys root usr
10、拷贝Lib
  cd /opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/lib
  cp *.so* /work/my_rootfs/lib -d
  cd /opt/FriendlyARM/toolschain/4.4.3/lib
  cp *.so* /work/my_rootfs/lib -d

六、移植 tslib

1、解压&配置&编译
  (1)tar zxvftslib-1.4.tar.gz
  (2)sudo mkdir -p/usr/local/tslib
  (3)cd tslib
  (4)./autogen.sh
  (5)./configure--host=arm-linux ac_cv_func_malloc_0_nonnull=yes CC=arm-none-linux-gnueabi-gccCXX=arm-none-linux-gnueabi-g++ -prefix=/usr/local/tslib
  (6)make
  (7)make install
  安装完成之后,tslib 就安装在虚拟机/usr/local/tslib 目录下
2、更改 tslib 配置文件
  (1)cd/usr/local/tslib/etc/
  (2)sudo vi ts.conf 
  去掉# module_raw input 前面的 “#” 和空格
3、将制作好的 tslib 移动到我们制作的文件系统
  (1)cd /usr/local
  (2)sudo tar zcvftslib.tar.gz tslib
  (4)mkdir -p/work/my_rootfs/usr/local
  (5)cp tslib.tar.gz/work/my_rootfs/usr/local
  (6)tar zxvftslib.tar.gz 
  (7)rm tslib.tar.gz 
4、添加 tslib 环境变量
  (1)vi/work/my_rootfs/etc/profile

  #!/bin/sh
  export T_ROOT=/usr/local/tslib
  export LD_LIBRARY_PATH=/usr/local/tslib/lib:$LD_LIBRARY_PATH
  export TSLIB_CONSOLEDEVICE=none
  export TSLIB_FBDEVICE=/dev/fb0
  export TSLIB_TSDEVICE=/dev/input/event0
  export TSLIB_PLUGINDIR=$T_ROOT/lib/ts
  export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf
  export POINTERCAL_FILE=/etc/pointercal
  export TSLIB_CALIBFILE=/etc/pointercal

5、测试
  此时,tslib 就已经移植好了,下载好的内核和文件系统到开发板,后启动。

cd /usr/local/tslib/bin

  ./ts_test 来测试
  出现“selected device is not a touchscreen Iunderstand”错误

解决方法:

cd /opt/FriendlyARM/toolschain/4.4.3/

grep "EV_VERSION" * -nR  出现:

arm-none-linux-gnueabi/sys-root/usr/include/linux/input.h:32:#defineEV_VERSION         0x010000

改为:

arm-none-linux-gnueabi/sys-root/usr/include/linux/input.h:32:#defineEV_VERSION         0x010001

重新到tslib目录

make clean

make

make install

更新开发板上的tslib。重新测试即可成功。

七、移植 qt5.6

1、解压
  tar zxvf qt-everywhere-opensource-src-5.6.0.tar
2、修改编译配置
  cd /work/qt-everywhere-opensource-src-5.6.0/qtbase/mkspecs/linux-arm-gnueabi-g++
  vi qmake.conf
针对于 2440 增加:
  QT_QPA_DEFAULT_PLATFORM = linuxfb
  QMAKE_CFLAGS += -msoft-float -D__GCC_FLOAT_NOT_NEEDED -march=armv4t-mtune=arm920t
  QMAKE_CXXFLAGS += -msoft-float -D__GCC_FLOAT_NOT_NEEDED -march=armv4t-mtune=arm920t
  march 指的 cpu 架构,针对2440 来说是 armv4t
  mtune 指的 cpu 名字,针对 2440 来说是 arm920t
 将以下部分
  # modifications to g++.conf
  QMAKE_CC = arm-linux-gnueabi-gcc
  QMAKE_CXX = arm-linux-gnueabi-g++
  QMAKE_LINK = arm-linux-gnueabi-g++
  QMAKE_LINK_SHLIB = arm-linux-gnueabi-g++

  # modifications to linux.conf
  QMAKE_AR = arm-linux-gnueabi-ar cqs
  QMAKE_OBJCOPY = arm-linux-gnueabi-objcopy
  QMAKE_NM = arm-linux-gnueabi-nm -P
  QMAKE_STRIP = arm-linux-gnueabi-strip
修改为:-lts 是指在链接时链接 tslib 库
  # modifications to g++.conf
  QMAKE_CC = arm-none-linux-gnueabi-gcc -lts
  QMAKE_CXX = arm-none-linux-gnueabi-g++ -lts
  QMAKE_LINK = arm-none-linux-gnueabi-g++ -lts
  QMAKE_LINK_SHLIB = arm-none-linux-gnueabi-g++ -lts

  # modifications to linux.conf
  QMAKE_AR = arm-none-linux-gnueabi-ar cqs 
  QMAKE_OBJCOPY = arm-none-linux-gnueabi-objcopy 
  QMAKE_NM = arm-none-linux-gnueabi-nm -P
  QMAKE_STRIP = arm-none-linux-gnueabi-strip 
3、配置编译
(1)sudo mkdir -p  /usr/local/Qt5.6
(2)cd ../../../回到QT目录
(3)配置

 ./configure  -prefix /usr/local/Qt5.6 \
  -opensource \
  -release \
  -confirm-license \
  -xplatform linux-arm-gnueabi-g++ \
  -shared \
  -qt-zlib \
  -no-gif \
  -qt-libjpeg \
  -no-nis \
  -no-opengl \
  -no-cups \
  -no-glib \
  -no-dbus \
  -no-rpath \
  -no-sse2 -no-sse3 -no-ssse3 -no-sse4.1 -no-sse4.2 \
  -no-avx  \
  -no-openssl \
  -nomake tools \
  -qreal float \
  -qt-libpng \
  -tslib \
  -nomake examples \
  -I /usr/local/tslib/include \
  -L /usr/local/tslib/lib

 (4) make -j4(时间很长,曾使用4.3.2报错,使用4.4.3后解决)
 (5)sudo make install(/usr/local/Qt5.6)
4、将移植好的 qt 打包到开发板
  cd /usr/local
  cp Qt5.6.tar.gz  /work/nfs_root

启动开发板挂载mnt目录

Cp Qt5.6 /usr/local/
 5、设置qt相关的环境变量
  此部分可以参考qt官方问文档:http://doc.qt.io/qt-5/embedded-linux.html,这里仅仅是设置支持了触摸屏,可以参考官方设置支持键盘,鼠标等等。

  在文件系统/etc/profile 里添加
  export QTEDIR=/usr/local/Qt5.6
  export LD_LIBRARY_PATH=/usr/local/Qt5.6/lib:$LD_LIBRARY_PATH
  export QT_QPA_GENERIC_PLUGINS=tslib
  export QT_QPA_FONTDIR=$QTEDIR/lib/fonts 
  export QT_QPA_PLATFORM_PLUGIN_PATH=$QTEDIR/plugins 
  export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=480x272:mmSize=480x272:offset=0x0:tty=/dev/tty1

  export QT_QPA_FB_TSLIB=1

红色部分请根据自己的开发板进行修改,JZ2440 V3 用上面的参数即可。

八、测试Qt应用程序

  将windows下编辑好的源码拷贝到虚拟机上,切换到源码目录

  (1)/usr/local/Qt5.6/bin/qmake

  (2)make

即可生成可执行文件,拿到开发板测试即可。

  嫌费事的话,将qmake 添加到环境变量里。

  在测试过程中发现程序跑起来没问题,但是有以下两条错误信息:

  QIconvCodec::convertFromUnicode:using Latin-1 for conversion, iconv_open failed
  QIconvCodec::convertToUnicode: using Latin-1 for conversion, iconv_openfailed

  大概是缺少libiconv,解决方法:

  (1)下载libiconv-1.14.tar.gz

  (2)mkdir -p /usr/local/libiconv

  (3)cd /usr/local/libiconv

  (4)./configure --host=arm-none-linux-gnueabi--prefix=/usr/local/libiconv CC=arm-none-linux-gnueabi-gccLDFLAGS="-L/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/sys-root/lib"--enable-static

  (5)make

  (6)make install

  (7)把虚拟机目录/usr/local/libiconv/lib 下的preloadable_libiconv.so 复制到文件系统的 /lib 下

  (8)在 /etc/profile 中添加 
export LD_PRELOAD=/lib/preloadable_libiconv.so

九、使Qt支持中文

  (1)下载字库jiang_dlut_DroidSansFallback.zip

  (2)解压将DroidSansFallback.ttf 放到单板文件系统/usr/local/Qt5.6/lib/fonts 目录下。

 然后在使用qtcreator 开发qt应用程序时,在项目中添加

  QT       += gui

  包含头文件 #include<QFontDatabase>

  代码中设置使用的字体。

    intid = QFontDatabase::addApplicationFont("/usr/local/Qt5.6/lib/fonts/DroidSansFallback.ttf");

    QStringmsyh = QFontDatabase::applicationFontFamilies (id).at(0);

    QFontfont(msyh,10);

    font.setPointSize(20);

    this->setFont(font);

十、实验操作

开发板上电:

nfs 30000000192.168.1.102:/work/nfs_root/root_ts.jffs2

nand erase.part rootfs

nand  write.jffs2  30000000  460000  $filesize

nfs 32000000 192.168.1.102:/work/nfs_root/uImage_nolcd_4.4.3

nand write 32000000  kernel

set bootargs console=ttySAC0,115200root=/dev/mtdblock3 rootfstype=jffs2 

save

reset


cd /etc/init.d/

vi rcS 

加入:

ifconfig eth0 192.168.1.17

mount -t nfs -o nolock 192.168.1.102:/work/nfs_root /mnt

cd /usr/local/

ls

tslib

更改 tslib 配置文件
  (1)cd   /usr/local/tslib/etc/
  (2)sudo vi ts.conf 
  去掉# module_raw input 前面的 “#” 和空格

insmod  s3c_ts.ko

cd /usr/local/tslib/bin

./ts_

将单板 /mnt下的QT5.6复制到/usr/local目录下

cp -rf Qt5.6 /usr/local/

查看tslib和QT的环境变量:

vi etc/profile(tslib和QT的环境变量)

cd /mnt

cp preloadable_libiconv.so  ../lib/

(增加etc/profile环境变量)

cp DroidSansFallback.ttf  /usr/local/Qt5.6/lib/fonts/

(增加etc/profile环境变量)

export LD_PRELOAD=/lib/preloadable_libiconv.so

insmod cfbimgblt.ko

insmod cfbcopyarea.ko

insmod cfbfillrect.ko

insmod lcd.ko

./fb_test /dev/fb0


insmod s3c_ts.ko

cd /usr/local/tslib/bin

./ts_calibrate

./arm_43