Chinaunix首页 | 论坛 | 博客
  • 博客访问: 178737
  • 博文数量: 79
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 15
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-25 14:40
文章分类
文章存档

2015年(1)

2014年(1)

2013年(2)

2012年(1)

2011年(5)

2010年(2)

2009年(6)

2008年(20)

2007年(27)

2006年(14)

我的朋友

分类: 嵌入式

2014-02-16 20:54:08

制作BeagleBoneBlack的ubuntu系统

    首先要说其实网上已经有很多的BBBlack ubuntu系统映像,完全可以直接下载安装的。比如下面这些:
   
    我是为了自己了解一下这个过程而折腾的。大的步骤可以分成4步:
1 下载编译kernel
2 用debootstrap制作ubuntu for arm的rootfs,安装软件包.
3 制作启动SD卡
4 修改配置X

1 下载编译kernel
参考:
这部我是依葫芦画瓢,所以不多说,详细的请看参考文章。
安装必要的工具git和lzop
sudo apt-get install git lzop
配置一下git仓库的环境变量:
git config --global user.email "your.email@here.com"
然后下载和编译内核:
git clone git://github.com/beagleboard/kernel.git
cd kernel
git checkout 3.8
./patch.sh
cp configs/beaglebone kernel/arch/arm/configs/beaglebone_defconfig
wget \;a=blob_plain\;f=bin/am335x-pm-firmware.bin\;hb=HEAD -O kernel/firmware/am335x-pm-firmware.bin
cd kernel
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- beaglebone_defconfig -j4
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- uImage dtbs -j4
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- uImage-dtb.am335x-boneblack -j4
编译和安装模块
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- modules -j4
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/home/yang/ubblack/kernel/rootfs3.8 modules_install
这里的rootfs3.8只是为了临时放一下编译后的module文件,后面制作好rootfs后再拷贝进去

---------------------------------------------------------------------------------------------
2 制作ubuntu rootfs
参考:
1
2 http://blog.csdn.net/embbnux/article/details/12751465
3
先安装用到的软件:
sudo apt-get install qemu-user-static
然后通过下面的命令获取一个基本的ubuntu文件系统
sudo qemu-debootstrap --arch armhf raring ubarm
armhf是指的hard float版本,raring是13.4的版本代号,如果是12
ubarm就是你的ubuntu基本系统的存放目录

命令会从ubuntu的网站上下载软件包并安装,构造一个基本文件系统。
网络给力的话这过程大约要半小时,然后chroot进去
sudo chroot ubarm
uname -a
Linux ubuntu 2.6.32 #28-Ubuntu SMP Tue Oct 9 19:32:08 UTC 2012 armv7l armv7l armv7l GNU/Linux
可以看到最后的架构是arm了。
得益于qemu-user-static,可以直接在这里跑为ARM 架构编译的软件。
现在可以直接在这个chroot系统里安装软件了。

先修改/etc/apt/source.list
deb raring main
deb raring multiverse
deb raring restricted
deb raring universe
debootstrap构造的文件系统里这个文件是空的,网络等配置也是,所以你要先根据自己的网络环境设置网卡和dns等,
这个和一般linux上设置网络是一样的,我就不展开说了。
然后你就可以apt-get install安装你要的软件包了。我装上了openssh-server 和LXDE.

基本文件系统大约是300m不到,装上openssh-server后是300多一点。LXDE再加上300多,最后我拷到sd卡时是700多兆了。
也许还有更小的wm可以用,不过LXDE似乎比较广泛,就用它吧。

在debootstrap下载完成后,其实就可以通过nfs的模式启动bbblack了,
set bootargs noinitrd roor=/dev/nfs rw nfsroot=192.168.1.111:/home/yang/ubarm ip=192.168.1.112:192.168.1.111:192.168.1.1:255.255.255.0:eth0 console=tty0

console=ttyO0,115200
nfs 0x80007fc0 192.168.1.111:/home/yang/tftp/uImage-bbb
bootm

上面的软件安装和下面的设置可以通过nfs启动后再做,不过在chroot时先搞定会方便很多。

添加串口console
在用debootstrap制作的rootfs里,是不包含有串口登陆tty的。
需要添加一个/etc/init/ttyS0.conf文件才能从串口登陆。否则你会
在串口看见KERNL的输出信息,但就是等不到登陆提示。
cp /etc/init/tty1.conf /etc/init/ttyS0.conf
然后把最后一句从 exec /sbin/getty -8 38400 tty1
改为exec /sbin/getty -L 115200 ttyS0 vt102。

这时最好把用户名和密码给加进去,特别是记得要修改root密码,debootstrap原来的密码我反正没试出来。
passwd root 改root密码
adduser user --home /home/user 加上user用户.
在这里我习惯直接用root登陆,不过要按正规的方法的话,你该用sudo,把权限赋予user
编辑/etc/sudoer文件,
在root行下加上这句:
user    ALL=(ALL:ALL) ALL

设置和安装locale,这里的设置过程当初比较混乱,现在记忆不清楚了,可能有误,请看参考文章实验一下。
参考 :
添加/etc/default/locale文件,加上这两行
LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN:zh"
LC_MESSAGES=POSIX

安装语言包
apt-get install language-pack-en language-pack-zh-hans
这会安装英文和中午的locale支持。
locale-gen
update-locale LANG=zh_CN.UTF-8 LC_MESSAGES=POSIX
安装文泉驿字体一支持中文显示
apt-get install ttf-wqy-microhei ttf-wqy-zenhei xfonts-wqy



添加/etc/X11/xorg.conf文件
Section "Monitor"
        Identifier      "Builtin Default Monitor"
EndSection
Section "Device"
        Identifier      "Builtin Default fbdev Device 0"
        Driver          "modesetting"
EndSection
Section "Screen"
        Identifier      "Builtin Default fbdev Screen 0"
        Device          "Builtin Default fbdev Device 0"
        Monitor         "Builtin Default Monitor"
        DefaultDepth    16
        SubSection "Display"
     Depth      16
     Modes           "1024x768" (这是为我的显示器准备的,可以不写这个subsection)
     EndSubSection
EndSection
Section "ServerLayout"
        Identifier      "Builtin Default Layout"
        Screen          "Builtin Default fbdev Screen 0"
EndSection


为后面的SD卡启动和x环境启动,还得编辑/etc/fstab和 /etc/environment
/etc/environment 加上
DISPLAY=:0.0
这是为后面的xwindow做准备。
/etc/fstab 的内容
/dev/mmcblk0p2   /           ext4   rw,noatime                0   0
/dev/mmcblk0p1   /boot/uboot vfat   rw,user,umask=000         0   0
tmpfs            /tmp        tmpfs  nodev,nosuid,size=10m     0   0
tmpfs            /var/log    tmpfs  nodev,nosuid,size=10m     0   0
tmpfs            /var/tmp    tmpfs  nodev,nosuid,size=10m     0   0
这里可以看到准备了一个uboot分区是vfat格式的,根分区在mmcblkop2
补充说明一下,fstab在nfs启动模式时是可以不设置的,但在到了sd卡启动则是必须的,否则内核启动完了
就会卡在ureadahead服务读取文件的地方。
---------------------------------------------------------------------------------------------
3制作启动SD卡
参考:
   

    BBBlack可以直接从SD卡启动,所以我也没心思去刷掉emmc带过来的angstrom系统.直接从sd卡启动就是了。
首先把sd卡分成两个区,P1给uboot,只需要几m大小,格式化为vfat;P2给根文件系统,格式化为ext4
    这里我就不详细忆述fdisk和mkfs的过程了参考文章里有很多其他内容,但核心的思想就是准备一个放uboot
参数文件和devicetree文件的小分区;一个根分区。
    我没有自己编译uboot,所以直接从板带的emmc p1分区里拷贝来了uboot.img文件,和MLO文件。另外还需要一个
uEnv.txt文件,我理解这是把uboot的参数文件化了,内容如下:

optargs=fixrtc
loadfdt=ext4load mmc ${mmcdev}:2 ${fdtaddr} /boot/dtbs/${fdtfile}
loaduimage=mw.l 4804c134 fe1fffff; if ext4load mmc 0:2 ${loadaddr} /boot/zImage; then mw.l 4804c194 01200000; echo Booting from external microSD...; setenv

mmcdev 0; else setenv mmcdev 1; if test $mmc0 = 1; then setenv mmcroot /dev/mmcblk1p2 rw; fi; ext4load mmc 1:2 ${loadaddr} /boot/zImage && mw.l 4804c194

00c00000; echo Booting from internal eMMC...; fi
mmcboot=run mmcargs; bootz ${loadaddr} - ${fdtaddr}
uenvcmd=i2c mw 0x24 1 0x3e; run findfdt; if test $board_name = A335BNLT; then setenv mmcdev 1; mmc dev ${mmcdev}; if mmc rescan; then setenv mmc1 1; else

setenv mmc1 0; fi; fi; setenv mmcdev 0; mmc dev ${mmcdev}; if mmc rescan; then setenv mmc0 1; else setenv mmc0 0; fi; run loaduimage && run loadfdt && run

mmcboot
p1分区的工作就这些。
然后把文件系统,ubarm目录下的内容全部拷到p2分区里去。
进入P2分区的boot目录,建立一个dtbs文件夹,从板上的emmc里找到am335x-boneblack.dtb文件,放到这个目录下。
这个是BBBlack的devicetree文件,启动时内核会读取这个文件配置外围硬件,如果有扩展板,可以通过编写
override devicetree文件实现扩展口的不同配置,这是3.x内核的新功能。

现在,你可以把sd卡插到BBBlack上启动板子了,如果一切真确,该可以通过串口,ssh登陆,链接了hdmi的话应该能看见lxdm的登陆界面了。
---------------------------------------------------------------------------------------------
4 配置X
如果没有链接hdmi,通过ps命令你还是会看见lxdm进程的存在,但是xrandr会显示hdmi没有连接,这时是没法用xrandr进行设置的,
所以必须连接好hdmi再来调试设置分辨率。HDMI应该有一系列的显示模式测试设置好了,但如果没有,请参考


通过xrandr改变分辨率:
xrandr --output HDMI-0 --mode 1024x768
顺便一说,这个对PC也使用,可以随时改变分辨率

最后,说一下自动登录,LXDE带着lxdm来的,但根据lxdm设置的自动登录就是没法启动startlxde命令(似乎是启动又挂了,反正黑屏一个),
改用slim,设置后倒是启动了,但却隐藏了鼠标。最后找来找去,找到了nodm,配置一下终于完成了自动登录:
修改/etc/nodm文件如下
# nodm configuration

# Set NODM_ENABLED to something different than 'false' to enable nodm
NODM_ENABLED=true

# User to autologin for
NODM_USER=user

# First vt to try when looking for free VTs
NODM_FIRST_VT='7'

# X session
NODM_XSESSION=/usr/bin/startlxde

如果前面的locale设置正确的话,LXDE的菜单应该能显示中文,chrom浏览器也能浏览中文网页了。


阅读(15419) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~