Ti liu ny c dnh cho software, hardware, v k s h thng ang c k hoch s
dng sn phm v cho nhng ai mun hiu r hn v sn phm.
Chng 1: gii thiu tng quan
iMX linux BSP l 1 tp hp cc gi binary, code, v file support c th c s dng to ra mt file nh h thng linux kernel cho board i.MX
1.1 Boot Stream Khi iMX23 thot khi ch reset, n s bt u thc thi ROM. Khng c thay th - khng c m khc c php x l cc trng hp ngoi l thit lp li. ROM c ch boot t cc chn (boot mode pins) chn khi ng t USB, SD/MMC hay NAND Flash, Boot stream bt u vi mt lnh load ch th ROM sao chp cc tp tin thc thi vo b nh. Lnh jump cui cng ch th ROM truyn iu khin n on thc thi m n c np. Mt lnh quan trng khc l call. Lnh ny gi ROM thc hin mt hm gi n mt a ch c th v sau tip tc x l boot stream khi tr v iu khin. Mt lnh call thng c bt u trc bi mt lnh load Di y l s i din cho mt boot stream c cha 2 bootlet v mt hm thc thi chnh
Mi bootlet l mt thc thi c xy dng mt cch ring bit cho mt mc ch c th m khng cn quan tm n bootlet ng trc hay sau n. Boot stream c th hng dn ROM gi bt k s lng thc thi (excutable) trc lnh jump, ty thuc vo nhu cu ca h thng. Cc boot stream i.MX233 cha cc bootlet sau: - Power_prep: bootlet ny cu hnh cc ngun cung cp (power supply) - Boot_prep: bootlet ny cu hnh clocks v sdram - Linux_prep: bootlet ny chun b cho qu trnh khi ng linux.
Di y l mt s i din ca mt boot stream c xy dng vi i.MX23 Linux BSP
Mt v d khc cho U-boot boot stream:
1.2 FlashBoot Loader Boot stream l mt khi nim quan trng cho imx233, n c th c coi l mt b np khi ng. B Linux SDK cung cp 2 boot stream image: - Linux kernel boot stream - U-boot boot stream
1.3 Linux kernel v Driver Gi Freescale BSP bao gm Freescale Linux 2.6.28 kernel, m ngun Driver, v mt Kernel image dng sn. Ta c th tm thy kernel image trong ng dn sau: L2.6.31_10.05.02_ER_images_MX233/zImage L2.6.31_10.05.02_ER_images_MX233/imx23_linux.sb L2.6.31_10.05.02_ER_images_MX233/imx23_uboot.sb
1.4 Root File System Gi Root file system cung cp busybox, th vin chung, v mt s thnh phn c bn. Linux BSP cha gi root file system ti: imx233/rootfs.jffs2 imx233/rootfs.ext2.gz
Chng 2: Xy dng Linux Platform Chng ny s gii thch lm th no thit lp mt mi trng pht trin (build enviroment), ci t v xy dng LTIB, t rootfs cho NFS, v ci t mi trng cho host (host environment)
2.1 Thit lp Built Environment Thit lp build environment bao gm ci t h iu hnh linux v LTIB
2.1.1 Ci t Linux OS v s dng linux Builder Ci t phin bn linux nh Fedora 4/5, ReaHat hoc ubuntu 8.0 trn mt my tnh. Trong ti kha lun s dng linux mint 16 (tng ng vi ubuntu)
2.2 Ci t v build LTIB LTIB (Linux Target Image Builder) l cng c build Linux (BSP Board Support Packet) cho cc board nhng da trn cc chip MPU ca Freescale bao gm PowerPC, ARM, Coldfire. LTIB c pht trin bi trang http://www.bitshrine.org/ltib/, y l mi trng cross compile kh hu dng h tr cho chng ta xy dng v pht trin h thng nhng theo cch d dng v tin li nht.
ci t LTIB, ta lm cc bc sau: Lu : trong mt s h thng linux, mt s lnh (th tc) phi c thc hin di quyn root. Tuy nhin, cc lnh sau c thc hin nh mt user thng thng.
Bc 1: ci t gi LTI B $tar zxf <ltib_release>.tar.gz $./<ltib_release>/install Trong <ltib_release> l tn phin bn ca LTIB. Lnh ny s ci t LTIB vo th mc ca my tnh
Bc 2: Build LTI B
Note: cn ci 1 s gi h tr cho vic build LTIB trc khi ci nu my tnh cha c cc gi ny: $sudo apt-get install rpm $sudo apt-get install rpm-build $sudo apt-get install bison
sau thc hin lnh: $sudo visudo thm dng sau vo cui $congtri ALL = NOPASSWD: /usr/bin/rpm, /opt/ltib/usr/bin/rpm trong congtri l tn user
$cd <your LTIB directory> $./ltib -m config Trong <your LTIB directory> l ng dn n th mc cha LTIB qu trnh ny mt khong 1h
Chn nn tng (platform) Freescale iMX refernce board v thot, lu cc thay i. Ti menu tip theo, chon kiu nn tng (platform type) v packet profile. Thot v lu cc thay i. Sau chy lnh sau $./ltib Sau khi hon thnh, ta c file kernel image trong ng dn rootfs/boot/zImage Lu : Ta phi t tham s network trong LTIB khi ng thng qua NFS $./ltib c Thit lp cc thng s mng trong cc ng dn sau y: Target System Configuration Options---> Network setup IP address netmask broadcast address gateway address nameserver IP address
2.3 Ci t rootfs cho NFS C 2 cch ci t rootfs cho NFS Cch 1: s dng gi rootfs trong bn phn phi S dng lnh sau t ng dn rootfs cho NFS (ta phi s dng ti khon root user) $mkdir /mnt/rootfs $cp imx233/rootfs.ext2.gz /tools $cd /tools $gunzip rootfs.ext2.gz $mount -o loop -t ext2 rootfs.ext2 /mnt/rootfs $cp -r /mnt/rootfs . $export ROOTFS_DIR=/tools/rootfs
Cch 2: s dng rootfs c to ra sau khi build kernel Thay v s dng rootfs.ext2.gz, ta c th s dng root file system trong ng dn <your_LTIB_directory> %export ROOTFS_DIR=/<your LTIB directory>/rootfs
2.4 Thit lp trn Linux Host thit lp trn h thng Linux Host, ta thc hin cc bc sau: Bc 1: tt tng la cho php tftp lm vic $iptables F hoc trong comman line, nhp: $setup
Bc 2: ci t tftp server Bc 3: ci t nfs server Bc 4: to th mc tftboot $mkdir /tftpboot Kernel image v mi th cn c ti ln bi tftp (cng nh zImage kernel) s c lu tr trong th mc ny
Bc 5:sa ni dung trong /etc/xinetd.d/tftp nh sau cho php tftp { disable = no socket_type = dgram. protocol = udp. wait = yes user = root server = /usr/sbin/in.tftpd. server_args = /tftpboot }
Bc 6: chy lnh sau trong linux host (my tnh ci linux) $vi /etc/exports
hoc dng lnh: $gedit /etc/exports
Thm dng sau trong file: $/tools/rootfs *(rw,sync,no_root_squash) Bc 7: khi ng li nfs v tftp server trn linux host $/etc/init.d/xinetd restart $/etc/init.d/nfs restart
Bc 8: copy zImage v rootfs.jffs2 trong gi LTIB vo th mc tftpboot $cp imx233/zImage /tftpboot $cp imx233/rootfs.jffs2 /tftpboot
hoc $cp /<your LTIB directory>/rootfs/boot/zImage /tftpbo $cp /<your LTIB directory>/rootfs.jffs2 /tftpboot trong <your LTIB directory> l ng dn n LTIB trn my tnh host linux
2.5 Xy dng Firmware Cu hnh Firmware. Trong command line g lnh $./ltib selectype
La chn chnh xc cc mc nh sau: --- Chn kiu nn tng (platform type) La chn (imx233/stmp3780) ---> --- Chn packages profile La chn (Updater profile for mx233) --->
Sau khi hon thnh vic xy dng ltib, file update.sb s c to ra Chng 3: cu hnh Board iMX233-EVK SoC OTP bits (Default have burned) C mt cng c gi l BitBurrner ghi cc bit nht nh. (tham kho thm trong file BitBurner\378x_mmc_boot_readme.txt trong gi phn mm) Cc bit OTP sau nn set cho php khi ng t MMC/SD card - cho php SD/MMC MBR h tr trong iMX233 SoC ROM: + HW_OCOTP_ROM[3]: 1 - cu hnh iMX233 SoC ROM s dng chn PWM3 iu khin ngun SD/MMC + HW_OCOTP_ROM0[20]: 0 + HW_COOTP_ROM0[21]: 1
Cu hnh trn board: Gt switch tng ng chon khi ng t MMC/SD
Chng 4: To Boot Stream Image Cc chip SoC iMX23 c tch hp trong ROM firmware c kh nng ti v thc hin cc binary image trong nh dng c bit t cc v tr khc nhau bao gm MMC/SD card v NAND flash. Mt binary image c gi l boot stream v bao gm mt s bootable image nh hn (bootlets) c kh nng khi ng v hng dn ROM firmware nn x l nhng bootlets (v d nh ti mt bootlet On-Chip t b nh RAM v chy n t ).
4.1 Thit lp Kernel comman line Trong LTIB, chy lnh sau, sau chn Package list v thit lp mc nh v thay th kernel command lines bng la chn boot_stream bn di. $./ltib m config
4.2 Xy dng Boot stream image Trong LTIB, xy dng mt Linux Kernel v U-Boot boot stream image mi, s dng lnh sau: $./ltib p boot_stream.spec f Cc file boot stream c tn imx23_linux.sb v imx23_uboot.sb s c to ra v t rootfs/boot/ directory
Chng 5: khi ng t Phn cng Chng ny s trnh by cch khi ng board iMX23 cho ln chy u tin. Thng thng c 3 cch khi ng linux kernel trn board iMX23: - Khi ng t MMC/SD card - Khi ng t NAND flash - Khi ng t Ethernet (network boot) Tt c cc ch khi ng ngoi tr khi ng t ethernet c h tr bi firmware c xy dng trong ROM ca iMX23. M ROM c boot stream image cha trong linux kernel t cc ngun khi ng khc nhau. Network boot ca linux kernel c thc hin bi b khi ng U-Boot (U-Boot boot loader). U-Boot c ti v bt u bi ROM firmware thng qua MMC card hoc NAND flash B linux SDK cung cp 2 boot stream image: - Linux kernel boot stream - U-boot boot stream Chng sau s m t lm th no chun b v khi ng linux kernel trong mi ch boot c h tr.
5.1 Target Preparation 5.1.1 Thit lp kernel command line Cc ty chn dng lnh bao gm mt dng lnh mc nh v ba dng lnh c la chn bng cch nhn phm trong khi h thng khi ng. Nu file cu hnh lnh c t hn bn dng lnh th nhng mc c thay th bng chui dng lnh mc nh sau: console=ttyAM0,115200
- thit lp SSP port n mt chc nng c bit, thit lp ssp1 v ssp2: + SSP1 trong ch SPI ssp1 = spi1 + SSP1 ch MMC/SD mode Ssp1 = mmc
Lu : gi tr la chn sspX thng thng s loi tr ln nhau. Khng th cu hnh mt cng SSP cho hai chc nng cng mt lc - la chn v tr ca root file system, bin dng lnh root phi c cu hnh. Cng c th c mt nhu cu thit lp lnh b sung ty chn dng da trn loi h thng lu tr root file system: o Root file system c nm trn mt phn vng th MMC root=/dev/mmcblk0p[N] rw rootwait vi [N] l s phn vng chnh (primary partiotion) cha root file system
o Root file system c t trn mt NAND fash (UBI volume) ubi.mtd=1 root=ubi0:rootfs rootfstype=ubifs
o Root file system trn NFS qua USB link (ta cn xy dng trong USB. Image USB mc nh c xy dng nh mt module) ip=[Target IP]:[Host IP]::::usb0:off root=/dev/nfs nfsroot=/tools/rootfs,rsize=1024,wsize=1024
Vi: Host IP l a ch IP ca Ubuntu Linux host Target IP a ch IP c gn cho IMX233 board
o Root file system trn NFS thng qua Ethernet link: ip=[Target IP]:[Host IP]::::eth0:off root=/dev/nfs nfsroot=/tools/rootfs,rsize=1024,wsize=1024
Vi: Host IP l a ch IP ca Ubuntu Linux host Target IP a ch IP c gn cho IMX233 board
C bn dng lnh ci sn cho php khi ng kernel vi root file system nm trn th MMC, b nh flash NAND v NFS root: - Lnh mc nh: console=ttyAM0,115200 root=/dev/mmcblk0p3 rw rootwait - Lnh thay th 1 (c gn cho phm 1) noinitrd console=ttyAM0,115200 ssp1=spi1 ubi.mtd=1 root=ubi0:rootfs0 rootfstype=ubifs rw gpmi - Lnh thay th 1 (c gn cho phm 1) - Lnh thay th 2 (c gn cho phm 2): ngi dng cn chnh sa n thit lp ng dn cho rootfs v a ch my ch nfs noinitrd console=ttyAM0,115200 root=/dev/nfs nfsroot=10.193.100.213:/data/rootfs_home/rootfs_mx233 rw ssp1=spi1 ip=dhcp rootwait gpmi
- Lnh thay th 3 (c gn cho phm 3) noinitrd console=ttyAM0,115200 root=/dev/ram0 rdinit=/sbin/init fec_mac=00:08:02:6B:A3:1A gpmi
5.1.2 Rebuilding the Linux SDK Nu cc dng lnh mc nh c thay i th cn phi xy dng li SDK to ra bn cp nht cho Linux kernel boot stream image vi cc lnh thay th pha trn Trong LTIB thc hin lnh: ./ltib -p boot_stream f
5.1.3 Ghi boot stream khi ng t mt b khi ng (boot media) Khi ng t MMC/SD - MMC card phi c mt phn vng chnh vi dung lng 16MB loi 0x53 (OnTrack DM6 Aux3). Di y l mt v d v u ra ca lnh fdisk l hin th mt phn vng c cu hnh ng:
fdisk -l /dev/sdd
Disk /dev/sdd: 1014 MB, 1014497280 bytes 64 heads, 32 sectors/track, 967 cylinders Units = cylinders of 2048 * 512 = 1048576 bytes
Device Boot Start End Blocks Id System /dev/sdd1 1 16 16368 53 OnTrack DM6 Aux3 - To mt phn vng nh MMC cha boot stream: dd if=/dev/zero of=mmc_boot_partition.raw bs=512 count=4
dd if=<where the boostream lives>/iMX233_linux.sb of=mmc_boot_partition.raw ibs=512 seek=4 conv=sync,notrunc
- Ghi phn vng MMC vo th nh (gii s phn vng khi ng MMC trong v d l /dev/sdd1) fdisk -l /dev/sdd Disk /dev/sdd: 1014 MB, 1014497280 bytes 64 heads, 32 sectors/track, 967 cylinders Units = cylinders of 2048 * 512 = 1048576 bytes Device Boot Start End Blocks Id System /dev/sdd1 1 16 16368 53 OnTrack DM6 Aux3
Khi ng t NAND Mt boot stream image khng th ghi vo NAND flash t Linux host. N cn phi ti kernel t th MMC hoc khi ng t network. Mt khi Linux ang chy trn STMP3780 c th ghi boot stream image vo NAND bng cng c kobs-ng: o Copy boot stream vo root file system. V d, trong trng hp ca NFS root use: cp <where the boostream lives>/iMX23_linux.sb /tools/rootfs o Khi ng board v login o Ghi boot stream image vo flash: kobs-ng -d iMX23_linux.sb
lu : nu b nh flash c d liu, cn phi xa ton b d liu trong bng lnh sau: #echo n 1 > /sys/bus/platform/devices/gpmi-nfc.0/ignorebad #flash_eraseall /dev/mtd<N> Khi ng t Network Khi ng linux kernel t network c thc hin bng cch s dng b np khi ng U-Boot. U-Boot boot stream c ti t bt k ngn khi ng (boot source) c h tr bi iMX23 ROM.
5.1.4 Chun b root file system To Root file system trn MMC card Mc nh kernel command line s dng 3 phn vng chnh: o FAT o Phn vng boot stream ku 0x53 (OnTrack DM6 Aux3) o Phn vng etx2 To mt phn vng chnh th 3 trn MMC card ngoi phn vng bt buc c cha boot stream image. Di y l mt v d v u ra ca lnh fdisk l hin th mt th MMC card c cu hnh ng: fdisk -l /dev/sdd Disk /dev/sdd: 1014 MB, 1014497280 bytes 64 heads, 32 sectors/track, 967 cylinders Units = cylinders of 2048 * 512 = 1048576 bytes Device Boot Start End Blocks Id System /dev/sdd1 1 100 FAT /dev/sdd2 101 16 16368 53 OnTrackDM6 Aux3 /dev/sdd3 117 967 973824 83 Linux nh dng phn vng th 2: mkfs.ext2 /dev/sdd3
Gn kt (mount) phn vng MMC/SD th 2: mount /dev/sdd2 /mnt/mmc
Sao chp Linux SDK root file system n th mc ni phn vng MMC c gn (mounted)
G phn vng MMC (unmount) umount /mnt/mmc
Thm thng tin cp nht bng tay n root file system /mnt/mmc nu cn thit Ngoi ra cng c mt s cng c gi l cfimager c th to ra phn vng, vit boot stream v rootfs Cfimager.exe a f imx23_linux.sb e rootfs.ext2 d <mass storage disk, no :, such as H>
To Root file system trn NAND flash Mt file system image khng th c ghi vo NAND flash t Linux host. Board iMX23c th c khi ng bng cch s dng mt root file system trn MMC hoc NFS u tin v sau Flash file system image c th c ghi vo b nh NAND flash vi cn c nandwrite. Nhp ng dn ltib/rootfs tar jcvf ../rootfs.tar.bz2 Sao chp rootfs.tar.bz2 vo MMC card hoc NFS root Khi ng board t MMC hoc NFS root Chy cc lnh sau: flash_eraseall /dev/mtd0 flash_eraseall /dev/mtd1 kobs-ng init imx23_linux.sb ubiattach /dev/ubi_ctrl -m 1 -d 0 ubimkvol /dev/ubi0 -n 0 -N rootfs0 -s 256MiB ubimkvol /dev/ubi0 -n 1 -N rootfs1 -s 256MiB ubimkvol /dev/ubi0 -n 2 -N data m mkdir -p /mnt/ubi0; mount -t ubifs ubi0_0 /mnt/ubi0 mkdir -p /mnt/ubi1; mount -t ubifs ubi0_1 /mnt/ubi1 tar -jxvf -C /mnt/ubi0 rootfs.tar.bz2 tar -jxvf C /mnt/ubi1 rootfs.tar.bz2 umount /mnt/ubi0 umount /mnt/ubi1
5.3 Target Boot 5.3.1 khi ng bng MMC/NAND chn ch khi ng t MMC