JZ2440

工作上玩过了全志A20,瑞芯微RK3288后,愈发觉得这些芯片很多地方玩不转,原因很简单因为对硬件不够熟悉,加上安卓框架过于庞大。
     为了弥补这个缺陷,加上2440在网上资料比较多,更容易快速系统的学习。所有有了这个开篇,当然在接下去的一段时间内,玩的都会是uboot.

     那么首先先搭建一个开发环境,这里买了韦东山开发的jz2440,主要是还是因为资料给的比较多吧,看到后面还有卖一些视频的。 经过两个平台的开发,也知道了资料是最宝贵的,一头扎进代码里并没有什么卵用,只能靠运气。

     用作者给的虚拟机感觉太low了,这里就用ubuntu15.10吧。
     
     虚拟机一开始用vmware workstation12 结果共享这个功能使用用不了,wmtools这玩意一开始搞了半天装上了也不行,也不想搞别的服务这样折腾了。
    干脆放弃这个虚拟机,用之前一直很熟的VirtualBox,果不其然,一遍就搞定了。

     我的环境是win10,VirtualBox下装ubuntu15.10. 安卓虚拟机的教程可能太LOW了,网上一堆的,就不放上了丢人现眼了。     

     这里就讲一下ubuntu 打开 root用户, 输入命令
     sudo passwd root
     输入两次密码就ok了


     接下来直接把交叉编译工具装上来,中间有需要的工具就直接装上就好了。

     交叉编译器就直接用提供的 arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2 不折腾了。




     这里中间插入一下vbox的共享目录非常不爽,只有root才能操作,我们改一下权限,这样用起来也方便一点。
     virtualBox的共享目录是在/mnt 下,其他用户没有任何权限,  解决方法是把你自己加入到vboxsf组里面,这样不用每次开机改权限那么麻烦了。
     这里的共享目录命名规则是  sf_加上你的共享文件夹的名字,这里共享文件夹可以弄很多个,非常方便。不像smb那么麻烦,访问也不是很方便。
     drwxrwx---  1 root vboxsf    0  4月  4 12:40 sf_shared/
      sudo usermod -a -G vboxsf yourusernanme
     我的用户的命令就是
     sudo usermod -a -G vboxsf u 
     重启一下就可以了。

     
     开始安装交叉编译器,其实也就是解压一下,然后配置一下环境变量罢了。
     先弄一个工作目录,我放到 ~/jz2440 下,也就是/home/u/jz2440/



     cd /media/sf_shared
     tar -xvf arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2  -C /home/u/jz2440/

     接下来配置环境变量,我们只在我们当前这个用户增加这个配置
     vim ~/.bashrc
     最后加入一行
     PATH=$PATH:~/jz2440/gcc-3.4.5-glibc-2.3.6/bin/
     保存退出, 重新导入环境变量即可。
      source ~/.bashrc

     然后来验证一下是否正常
     u@111:~$ arm-linux-gcc -v
     bash: /home/u/jz2440/gcc-3.4.5-glibc-2.3.6/bin/arm-linux-gcc: 没有那个文件或目录
     这里发现arm-linux-gcc 路径是每次,可是他提示没有那个文件或目录,我猜测他引用了某些东西
     解决办法,因为我的ubuntu是64位的没有安装32位的库
      sudo apt-get install libc6:i386

     u@111:/$ arm-linux-gcc -v
Reading specs from /home/u/jz2440/gcc-3.4.5-glibc-2.3.6/bin/../lib/gcc/arm-linux/3.4.5/specs
Configured with: /work/tools/create_crosstools/crosstool-0.43/build/arm-linux/gcc-3.4.5-glibc-2.3.6/gcc-3.4.5/configure --target=arm-linux --host=i686-host_pc-linux-gnu --prefix=/work/tools/gcc-3.4.5-glibc-2.3.6 --with-float=soft --with-headers=/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/include --with-local-prefix=/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --enable-languages=c,c++ --enable-shared --enable-c99 --enable-long-long
Thread model: posix
gcc version 3.4.5



     下面编译uboot

     
     看一下接下来用的工具的目录
u@111:~/jz2440$ tree -L 2
.
├── gcc-3.4.5-glibc-2.3.6
├── linux
│   ├── linux-2.6.22.6_jz2440.patch
│   └── linux-2.6.22.6.tar.bz2
└── uboot
    ├── u-boot-1.1.6_jz2440.patch
    └── u-boot-1.1.6.tar.bz2



     u@111:~/jz2440/uboot$ ls
     u-boot-1.1.6  u-boot-1.1.6_jz2440.patch  u-boot-1.1.6.tar.bz2

     tar -xvf u-boot-1.1.6.tar.bz2

     cd u-boot-1.1.6/

     patch -p1 < ../u-boot-1.1.6_jz2440.patch
     
     make 100ask24x0_config

     make
     
这样就得到了uboot.bin

 u@111:~/jz2440/uboot/u-boot-1.1.6$ ll u-boot.bin
-rwxrwxr-x 1 u u 198316  4月  4 13:42 u-boot.bin*
     

再接编译内核

     tar -xvf linux-2.6.22.6.tar.bz
     cd linux-2.6.22.6/
     patch  -p1 < ../linux-2.6.22.6_jz2440.patch
     cp config_ok .config
     make uImage  【这里用多线程并发编译可以加快速度 参数 -jN 我使用8】


又一次出现了幺蛾子:
     Makefile:1449: *** mixed implicit and normal rules: deprecated syntax
/home/u/jz2440/linux/linux-2.6.22.6/Makefile:416: *** mixed implicit and normal rules: deprecated syntax
/home/u/jz2440/linux/linux-2.6.22.6/Makefile:1449: *** mixed implicit and normal rules: deprecated syntax
make[1]: *** No rule to make target 'silentoldconfig'。 停止。
  CHK     include/linux/version.h
  UPD     include/linux/version.h
make: *** No rule to make target 'include/config/auto.conf', needed by 'include/asm-arm/.arch'。 停止。

解决办法:
       由于我的系统的make工具太新,make的旧版规则已经无法兼容新版。
         修改前:416行 config %config: scripts_basic outputmakefile FORCE
         修改后:416 行 %config: scripts_basic outputmakefile FORCE
      
         修改前:1449 行 / %/: prepare scripts FORCE
         修改后:1449 行 %/: prepare scripts FORCE


     重新来一次,发现可以了
     make -j8 uImage

  OBJCOPY arch/arm/boot/Image
  Kernel: arch/arm/boot/Image is ready
  AS      arch/arm/boot/compressed/head.o
  GZIP    arch/arm/boot/compressed/piggy.gz
  CC      arch/arm/boot/compressed/misc.o
  AS      arch/arm/boot/compressed/piggy.o
  LD      arch/arm/boot/compressed/vmlinux
  OBJCOPY arch/arm/boot/zImage
  Kernel: arch/arm/boot/zImage is ready
  UIMAGE  arch/arm/boot/uImage
"mkimage" command not found - U-Boot images will not be built
  Image arch/arm/boot/uImage is ready

   这里似乎又出现了一个问题,找不到u-boot,看提示就看出来打包uImage失败了。
   发现这个目录下:  ~/jz2440/linux/linux-2.6.22.6/arch/arm/boot
    只有Image 和zImage 没有uImage
    猜测一下原来uImage 应该就是带uboot的镜像把,那么我们看看这个目录下有什么文件:
     drwxrwxr-x  4 u u    4096  4月  4 14:11 ./
drwxrwxr-x 52 u u    4096  8月 31  2007 ../
drwxrwxr-x  2 u u    4096  8月 31  2007 bootp/
drwxrwxr-x  2 u u    4096  4月  4 13:59 compressed/
-rw-rw-r--  1 u u      40  8月 31  2007 .gitignore
-rwxrwxr-x  1 u u 3749512  4月  4 13:59 Image*
-rw-rw-r--  1 u u     108  4月  4 13:59 .Image.cmd
-rw-rw-r--  1 u u    1326  8月 31  2007 install.sh
-rw-rw-r--  1 u u    2549  8月 31  2007 Makefile
-rw-rw-r--  1 u u     220  4月  4 14:06  .uImage.cmd
-rwxrwxr-x  1 u u 1848680  4月  4 13:59 zImage*
-rw-rw-r--  1 u u     135  4月  4 13:59 .zImage.cmd

这文件的名字似乎很像是我们关心的东西,就看看写了什么吧?
cat .uImage.cmd

cmd_arch/arm/boot/uImage := /bin/bash /home/u/jz2440/linux/linux-2.6.22.6/scripts/mkuboot.sh -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008000 -n 'Linux-2.6.22.6' -d arch/arm/boot/zImage arch/arm/boot/uImage


这里能看到一个mkuboot.sh脚本和uboot有关

#!/bin/bash

#
# Build U-Boot image when `mkimage' tool is available.
#

MKIMAGE=$(type -path "${CROSS_COMPILE}mkimage")

if [ -z "${MKIMAGE}" ]; then
        MKIMAGE=$(type -path mkimage)
        if [ -z "${MKIMAGE}" ]; then               
                # Doesn't exist
                echo '" mkimage" command not found - U-Boot images will not be built' >&2
                exit 0;
        fi
fi



这里看懂了就是找一个mkimage工具的路径,我在uboot目录找到了这个工具
~/jz2440/uboot/u-boot-1.1.6/tools/mkimage

感觉这样改脚本也是比较麻烦的直接用安装一下这个工具就好了
sudo apt-get install uboot-mkimage
现在没有可用的软件包 uboot-mkimage,但是它被其它的软件包引用了。
这可能意味着这个缺失的软件包可能已被废弃,
或者只能在其他发布源中找到
可是下列软件包取代了它:
  u-boot-tools:i386 u-boot-tools

E: 软件包 uboot-mkimage 没有可供安装的候选者

那么就安装这两个好了:

sudo apt-get install   u-boot-tools:i386 u-boot-tools


重新make

  Kernel: arch/arm/boot/Image is ready
  Kernel: arch/arm/boot/zImage is ready
  UIMAGE  arch/arm/boot/uImage
Image Name:   Linux-2.6.22.6
Created:      Mon Apr  4 14:27:06 2016
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    1848680 Bytes = 1805.35 kB = 1.76 MB
Load Address: 30008000
Entry Point:  30008000
 Image arch/arm/boot/uImage is ready
 

总算是可以了!!!!!

本来以为直接解压就可以完成的工作,硬是出现了好多幺蛾子,其实这些错误并没有什么,只要观察错误提示信息,加上百度和一定耐心就可以解决!


ps:看到资料中给出4.3寸屏,需要替换一个文件!

突然发现还有屏幕参数需要改对比了一下两个问题差别,多了一个480x272的配置项目,那是怎么选择的呢?以后再说吧!

/* 480x272 */
static struct s3c2410fb_mach_info smdk2440_lcd_cfg __initdata = {
static struct s3c2410fb_mach_info smdk2440_lcd_cfg_320x240 __initdata = {

原来的:
static struct s3c2410fb_mach_info smdk2440_lcd_cfg_320x240 __initdata = {


u@111:~/jz2440/linux/linux-2.6.22.6/arch/arm/mach-s3c2440$ cp /media/sf_shared/4.3寸LCD_mach-smdk2440.c mach-smdk2440.c

猜你喜欢

转载自blog.csdn.net/u010783226/article/details/79376369