====== Cb3 Lubuntu-12.10-desktop Nand Installation 20131015-build ====== //__About this Article__// * **Author**: benn --- benn@cubietech.com --- 2013/10/14 22:37 * **Copyrights**: [[http://creativecommons.org/licenses/by-sa/3.0/|CC Attribution-Share Alike 3.0 Unported]] * **Contributors**: [[http://cubieboard.org/|Cubieboard Community]] : ... ===== Abstract ===== Cubietruck is the 3rd board of cubietech, which is also named cubieboard3. The board features an Allwinner A20 ARM Cortex-A7 dual core processor with Mali 400 MP2 graphics, 2GB of RAM, HDMI, Gigabit Ethernet, WiFi, Bluetooth, and a microSD card slot. There’s nothing too surprising in those specs, but here’s what sets this developer board apart from a tablet with its screen ripped off. The Cubietruck has a SATA 2.0 interface, 2 USB host ports, SPDIF, a headphone jack, IR port, and 4 LED lights. It also has 54 extended pins including UART, PS2, and a bunch of other options. Read more about cubietruck, please refer to [[http://docs.cubieboard.org/products/start|here]]. Lubuntu is a fast and lightweight operating system developed by a community of Free and Open Source enthusiasts. The core of the system is based on Linux and Ubuntu . Lubuntu uses the minimal desktop LXDE, and a selection of light applications. It's official site is [[http://www.lubuntu.net/|lubuntu]] The Cubie team have ported cubietruck to lubuntu-12.10-desktop, here is a guide for installing lubuntu-12.10-desktop to cubietruck nandflash. ===== Preparations ===== ==== Download Images ==== wget http://dl.cubieboard.org/software/a20-cubietruck/lubuntu/ct-lubuntu-nand-v1.00/ct-lubuntu-desktop-20131026/lubuntu-desktop-nand.img.gz gzip -d lubuntu-desktop-nand.img.gz ==== PhoenixSuit ==== To flash the image to cubietruck board, you need to install phoenixsuit on your labtop. Please refer to the [[http://docs.cubieboard.org/tutorials/common/livesuit_installation_guide|Installation Guide]] Here is my working enviroment $ cat /etc/os-release NAME="Ubuntu" VERSION="12.04.2 LTS, Precise Pangolin" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu precise (12.04.2 LTS)" VERSION_ID="12.04" uname -a Linux ubt 3.2.0-49-generic #75-Ubuntu SMP Tue Jun 18 17:39:32 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux ===== Installation ===== ==== Start LiveSuit ==== $ ~/Bin/LiveSuit/LiveSuit.sh {{:tutorials:ct1:installation:lubuntu-livesuit.png?700|LiveSuit GUI}} ==== Select Image ==== {{:tutorials:ct1:installation:lubuntu-livesuit-2.png?700|LiveSuit GUI}} ==== Enter FEL Mode ==== {{:tutorials:ct1:installation:livesuit-enter-fel-mode.png?700|LiveSuit GUI}} - Press FEL key, and holding it - Plug in mini usb cable, and wait the following prombt - Release FEL key {{:tutorials:ct1:installation:lubuntu-livesuit-3.png?700|LiveSuit GUI}} ==== Flash to Board ==== When seeing the prombt, you have enter the FEL mode. Select Yes to continue {{:tutorials:ct1:installation:lubuntu-livesuit-4.png?700|LiveSuit GUI}} {{:tutorials:ct1:installation:lubuntu-livesuit-5.png?700|LiveSuit GUI}} Congratulations! You have finished the installation process. Enjoy your Cubie and Lubuntu Desktop! When you first start up the system, It will take about 2 minutes to initialize the system. Also we suggest you have the ethernet cable connected when booting, to avoid waiting DHCP timeout. ===== Customizing ===== ==== Changing Boot Parameters ==== If we want to change boot parameter, say, we want to add "hdmi.audio=EDID:0 disp.screen0_output_mode=EDID:1920x1080p50" to the kernel parameter: $wget http://dl.cubieboard.org/software/a20-common/mk_env_fex.tar $tar -xf mk_env_fex.tar $cd mk_env_fex $vim env.cfg Change the content below ... loglevel=5 extras=hdmi.audio=EDID:0 disp.screen0_output_mode=EDID:1920x1080p50 #set kernel cmdline if boot.img or recovery.img has no cmdline we will use this setargs_nand=setenv bootargs console=${console} init=${init} loglevel=${loglevel} ${extras} setargs_mmc=setenv bootargs console=${console} init=${init} loglevel=${loglevel} #nand command syntax: sunxi_flash read address partition_name read_bytes .. $mk_env_fex copy env.fex to lubuntu OS, then dd if=env.fex of=/dev/nandb bs=1M ==== Changing Kernel ==== * Getting The Kernel Source The kernel source matching this image is [[http://dl.cubieboard.org/software/a20-cubietruck/lubuntu/obsolete/ct_lubuntu_desktop_12.10_20131015/linux-sunxi.tar.gz|here]]. And the defconfig is [[http://dl.cubieboard.org/software/a20-cubietruck/lubuntu/obsolete/ct_lubuntu_desktop_12.10_20131015/kernel_defconfig|here]]. Please also refer to http://github.com/linux-sunxi http://github.com/cubieboard2 * Compiling $tar -zxvf linux-sunxi.tar.gz $cp kernel_defconfig linux-sunxi/.config $cd linux-sunxi $make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage modules $objcopy -R .note.gnu.build-id -S -O binary vmlinux bImage $mkbootimg --kernel bImage \ --ramdisk rootfs.cpio.gz \ --board "sun7i" \ --base 0x40000000 \ -o "boot.img" Note: mkbootimg command can be found at this [[http://dl.cubieboard.org/software/a20-common/mk_env_fex.tar|package]] * Replacing Copy boot.img, modules to your lubuntu system, #dd if=boot.img of=/dev/nandc bs=1M Note: You should be skilled in kernel building, else it's easy to damage your OS system. ==== Building Custom Modules ==== * Download Kernel Source $wget http://dl.cubieboard.org/software/a20-cubietruck/lubuntu/obsolete/ct_lubuntu_desktop_12.10_20131015/linux-sunxi.tar.gz $wget http://dl.cubieboard.org/software/a20-cubietruck/lubuntu/obsolete/ct_lubuntu_desktop_12.10_20131015/kernel_defconfig * Extract and create local git repo $tar -zxf linux-sunxi.tar.gz $cp kernel_defconfig linux-sunxi/.config $git init $git add . $git commit -m "init a repo just for match the uname -r token" -a $make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig $make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage $cd $your_kernel_module_path_and_point_your_kdir_here ... *Copy your new module to your lubuntu OS ==== Using GPIOs ==== TBD ==== Using GPIO Interrupt ==== TBD ==== Using PWM ===== TBD ==== Using More UARTs ==== TBD ==== C/C++ Programming ==== lubuntu-12.10-desktop is quite a modern operating system, that we can do almost all language programming, including C/C++, JAVA, Python, Perl, and so on. To support C/C++ programming, just run the following command: #apt-get install build-essential To become more productivy, you can also use VIM or EMACS #apt-get install vim emacs cscope cscope-el ===== Tips ===== ==== About Partitions ==== * Partitons Layout We have 5 partitions on the system, nand represent the whole nandflash. Nand[a-e] are treated as partitons root@cubietruck:~# ls /dev/nand* -l brw-rw---- 1 root disk 93, 0 Oct 15 08:46 /dev/nand brw-rw---- 1 root disk 93, 1 Oct 15 08:46 /dev/nanda brw-rw---- 1 root disk 93, 2 Oct 15 08:46 /dev/nandb brw-rw---- 1 root disk 93, 3 Oct 15 08:46 /dev/nandc brw-rw---- 1 root disk 93, 4 Oct 15 08:46 /dev/nandd brw-rw---- 1 root disk 93, 5 Oct 15 08:46 /dev/nande * /dev/nanda Contains the bootlogo, script.bin, and so on root@cubietruck:~# ls /mnt/nanda/ boot.axf drv_de.drv font24.sft linux os_show script.bin boot.ini drv_hdmi.drv font32.sft magic.bin prvt.axf sprite.axf * /dev/nandb Contains the u-boot boot parameters. The origin is showed below, bootdelay=1 #default bootcmd, will change at runtime according to key press bootcmd=run setargs_nand boot_normal#default nand boot #kernel command arguments console=ttyS0,115200 nand_root=/dev/system mmc_root=/dev/mmcblk0p7 init=/init loglevel=5 #set kernel cmdline if boot.img or recovery.img has no cmdline we will use this setargs_nand=setenv bootargs console=${console} init=${init} loglevel=${loglevel} setargs_mmc=setenv bootargs console=${console} init=${init} loglevel=${loglevel} #nand command syntax: sunxi_flash read address partition_name read_bytes #0x40007800 = 0x40008000(kernel entry) - 0x800(boot.img header 2k) boot_normal=boota 40007800 #boot_normal=sunxi_flash read 40007800 boot;boota 40007800 boot_recovery=sunxi_flash read 40007800 recovery;boota 40007800 boot_fastboot=fastboot #recovery key recovery_key_value_max=0x13 recovery_key_value_min=0x10 #fastboot key fastboot_key_value_max=0x8 fastboot_key_value_min=0x2 If you want to change your own kernel parameter, you can: - Save above text to a file, e.g. env.cfg - Use u_boot_env_gen tool to convert the file to a image - dd the image to /dev/nandb If you are using Ubuntu 12.04 X86_64, there is a simple script help you do that $wget http://dl.cubieboard.org/software/a20-common/mk_env_fex.tar $tar -xf mk_env_fex.tar $cd mk_env_fex $vim env.cfg -- and change the content as you want $./mk_env_fex.sh {{tag>Cubieboard Cubietruck}}