分类: 嵌入式
2016-10-28 10:32:28
使用读卡器+microSD卡,操作环境:Ubuntu 16.04虚拟机。
读卡器连接上ubuntu系统,一般显示为sdb、sdc等;如果是直接插入BBB,则显示为mmcblk0、mmcblk1等。
sudo
fdisk /dev/sdb
使用命令d,删除SD卡的所有分区,如sdb1,sdb2等;
使用命令n,新建第一个分区,分区大小96M;使用命令t更改分区类型,并使用c设置为FAT格式;
使用命令n,新建第二个分区,分配剩余所有空间;
使用命令a,选择第一个分区活动分区;
使用命令w,将分区信息写入SD卡中。
注意:使用n新建分区时,提示选择是primary还是extended,两个分区都选择primary。
参考资料:EVB335X MMC(TF_EMMC) Linux使用手册.pdf
格式化第一个分区:sudo mkfs.vfat -F 32 -n boot
/dev/sdb1
格式化第二个分区:sudo mkfs.ext4 -L rootfs /dev/sdb2
Vmware中操作,断开SD卡连接,并重新连接。
建立两个文件夹boot及rootfs,并挂载到SD卡的两个分区:
mkdir boot rootfs
sudo mount /dev/sdb1 boot
sudo mount /dev/sdb2
rootfs
解压uboot及Ubuntu文件系统:
tar xf bone-uboot.tar.xz
-C boot
tar xf ubuntu-trusty-14.04-rootfs-3.14.4.1-bone-armhf.com.tar.xz
-C rootfs
sync; sudo umount boot; sudo
umount rootfs
bone-uboot.tar.xz中包含MLO、u-boot.img、uEnv.txt。
资源下载:
安装linux文本界面支持库,及压缩包相关库
sudo apt-get install build-essential libncurses5{,-dev}
sudo apt-get install lzop
sudo apt-get install device-tree-compiler
以下可能会解决git下载出现错误提示:The remote end hung up unexpectedly
git config --global http.postBuffer 1048576000
git config --global core.compression 0
mkdir bbb
cd bbb
export BBB=$PWD
git clone beagle-kernel
wget
tar xvjf xenomai-2.6.3.tar.bz2
更高版本可能会有问题,故检出版本3.8。
cd beagle-kernel
git checkout origin/3.8 -b 3.8
git reset --hard eae56c3
./patch.sh
wget "" -O kernel/firmware/am335x-pm-firmware.bin
cp configs/beaglebone kernel/.config
cd kernel
patch -p1 < ../../xenomai-2.6.3/ksrc/arch/arm/patches/beaglebone/ipipe-core-3.8.13-beaglebone-pre.patch
patch -p1 < ../../xenomai-2.6.3/ksrc/arch/arm/patches/ipipe-core-3.8.13-arm-3.patch
patch -p1 < ../../xenomai-2.6.3/ksrc/arch/arm/patches/beaglebone/ipipe-core-3.8.13-beaglebone-post.patch
cd ../../xenomai-2.6.3/scripts
./prepare-kernel.sh --arch=arm --linux=../../beagle-kernel/kernel
cd ../../beagle-kernel/kernel
make ARCH=arm menuconfig
Under CPU Power Management ---> CPU Frequency scaling, disable [ ] CPU Frequency scaling.(Note: Don’t know if it’s better to leave it enabled, read the comments!)
Under Real-time sub-system --->Drivers--->Testing drivers, enable everything.
编译内核、dtb及驱动模块:
make -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOADADDR=0x80008000 zImage dtbs modules
sudo mount /dev/sdb2
rootfs
编译驱动模块ko文件,并安装到SD卡:
sudo cp beagle-kernel/kernel/arch/arm/boot/zImage rootfs/boot/zImage
cd beagle-kernel/kernel
切换到root权限,并执行:
source /etc/environment # 更新交叉编译器环境变量
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=$BBB/rootfs modules_install
拷贝xenomai驱动到SD卡的文件系统:
cd $BBB
mkdir rootfs/home//xeno_drivers
sudo cp beagle-kernel/kernel/drivers/xenomai/testing/*.ko rootfs/home//xeno_drivers/
同样,先切换到root权限:
cd xenomai-2.6.3
./configure CFLAGS="-march=armv7-a -mtune=cortex-a8 -mfloat-abi=hard -mfpu=neon -ffast-math" --host=arm-linux-gnueabihf
make
make DESTDIR=$BBB/rootfs install
注意:make install时,DESTDIR使用绝对路径。
注意:Xenomai应用层补丁在SD卡文件系统中的目录位置为/usr/xenomai。
注意:编译需要root权限,需要先使用su命令切换到root,并加载arm-linux-gnueabihf-gcc的路径。
注意:configure时,使用--host的差别在于:编译生成的文件名,添加了arm-linux-gnueabihf-前缀。
cd $BBB
sudo cp -f beagle-kernel/kernel/arch/arm/boot/dts/*.dtb /rootfs/boot/dtbs
Beaglebone Black按住Boot键,从SD卡开机启动。用户名及密码均为ubuntu。
cd /home//xeno_drivers
sudo insmod xeno_klat.ko
sudo lsmod
cd /usr/xenomai/bin
测试用户实时模块:
./ latency
测试内核实时模块:
./ klatency
选用的ubuntu文件系统中,linux内核位于/boot目录,这个与SD的boot分区中的uEnv.txt中的设置对应。文件名及链接见下图。
从上图及uEnv.txt可见,linux内核为zImage,而不是uImage。
编译的dtb文件位于/boot/dtbs目录,linux加载的*.dtb文件由uboot决定,使用如下命令查看:
l strings u-boot.img | grep fdtfile
linux内核及Xenomai补丁构建:
Installing Xenomai on Beaglebone using Debian distribution:
Xenomai on the Beaglebone Black in 14 easy steps:
Xenomai 3 on BeagleBone Black:
The root Account in Ubuntu is disabled by default because his password is not set. But if you'd like to use root Account by some reason, it's possible to use like follows.
it's possible to switch to root account with su command to set root account's password.
trusty@dlp:~$ sudo passwd root
[sudo] password for trusty: # own password
Enter new UNIX password: # set root password
Retype new UNIX password: # confirm
passwd: password updated successfully
按提示输入root新密码。完成后即可输入su,按提示输入密码即可登陆。