slitaz-arm annotate spi @ rev 36

Tiny edits
author Paul Issott <paul@slitaz.org>
date Fri Mar 07 19:13:20 2014 +0000 (2014-03-07)
parents bae84a6b7455
children 7c5d5748623d
rev   line source
pankso@31 1 #!/bin/sh
pankso@31 2 #
pankso@31 3 # Spi - SliTaz Raspberry Pi Tool
pankso@31 4 #
pankso@31 5 # Copyright (C) 2012-2014 SliTaz ARM - BSD License
pankso@31 6 # Author: Christophe Lincoln <pankso@slitaz.org>
pankso@31 7 #
pankso@31 8 . /lib/libtaz.sh
pankso@31 9
paul@32 10 # Paths
pankso@31 11 [ "$work" ] || work="$(pwd)"
pankso@31 12 distro="$work/distro"
pankso@35 13 rpi="$work/rpi"
pankso@35 14 data="$rpi/distro/data"
pankso@35 15 boot="$rpi/distro/boot"
pankso@35 16 rootfs="$rpi/distro/rootfs"
pankso@35 17 rpi_git="$rpi/git"
pankso@35 18 kernel="$rpi_git/linux"
pankso@35 19 firmware="$rpi_git/firmware"
pankso@35 20 tools="$rpi_git/tools"
pankso@31 21
paul@32 22 # URLs
pankso@35 23 rpi_mirror="http://mirror.slitaz.org/arm/rpi/"
pankso@31 24 fw_url="https://github.com/raspberrypi/firmware/raw/master/boot/"
pankso@31 25 tools_url="https://raw.github.com/raspberrypi/tools/master/mkimage/"
pankso@35 26 rpi_git_url="git://github.com/raspberrypi/"
pankso@31 27
paul@32 28 # Lists
pankso@31 29 fwlist="bootcode.bin fixup.dat start.elf"
pankso@31 30 toolslist="imagetool-uncompressed.py args-uncompressed.txt \
pankso@35 31 boot-uncompressed.txt"
pankso@31 32
pankso@31 33 #
pankso@31 34 # Functions
pankso@31 35 #
pankso@31 36
pankso@31 37 usage() {
pankso@31 38 cat << EOT
pankso@31 39
pankso@31 40 $(boldify "Usage:") $(basename $0) [command] [--option]
pankso@31 41
pankso@31 42 $(boldify "Commands:")
pankso@31 43 info Display paths and distro info
pankso@31 44 install Install SliTaz RPi to sdcard
pankso@31 45 gen Generate a new SliTaz RPi distro
pankso@35 46 cook-linux Build the Raspberry Pi Linux kernel
paul@36 47 get-linux Get the SliTaz RPi linux package
pankso@31 48 get-fw Download or update RPi Firmware
pankso@35 49 clone-fw Clone the RPi Firmware repository
pankso@31 50 get-tools Download or update RPi Tools (mkimage)
pankso@31 51 get-prebuilt Get a prebuilt SliTaz ARM toolchain
pankso@31 52 oclock Display overclocking information
pankso@31 53
pankso@31 54 $(boldify "Options:")
pankso@31 55 --up Update firmware, tools or kernel
pankso@31 56 --clean Clean the distro tree (Sat can also be used)
pankso@31 57 --turbo Force the RPi to run at the highest arm_freq
pankso@31 58 --oclock= Set the RPi overclocking mode
pankso@31 59
pankso@31 60 EOT
pankso@31 61 }
pankso@31 62
pankso@31 63 error() {
pankso@31 64 echo "[ $(colorize 31 'ERROR') ] $@"
pankso@31 65 }
pankso@31 66
pankso@31 67 header() {
pankso@31 68 newline
pankso@31 69 boldify "$@"
pankso@31 70 separator
pankso@31 71 }
pankso@31 72
pankso@35 73 # Get minimal RPi firmware
pankso@31 74 get_fw() {
pankso@35 75 mkdir -p $firmware/boot
pankso@31 76 for fw in $fwlist
pankso@31 77 do
pankso@35 78 [ "$up" ] && rm -f $firmware/boot/$fw
pankso@35 79 if [ ! -f "$firmware/boot/$fw" ]; then
pankso@31 80 echo -n "Fetching: $fw"
pankso@31 81 wget -q --no-check-certificate ${fw_url}${fw} \
pankso@35 82 -O $firmware/boot/${fw}; status
pankso@31 83 fi
pankso@31 84 done
pankso@31 85 }
pankso@31 86
pankso@35 87 # Get all RPi firmware
pankso@35 88 clone_fw() {
pankso@35 89 [ -d "${rpi_git}/firmware" ] && return 0
pankso@35 90 mkdir -p ${rpi_git} && cd ${rpi_git}
pankso@35 91 git clone --depth 1 ${rpi_git_url}firmware.git
pankso@35 92 }
pankso@35 93
pankso@31 94 # Get RPi tools
pankso@31 95 get_tools() {
pankso@35 96 mkdir -p $tools
pankso@31 97 for t in $toolslist
pankso@31 98 do
pankso@35 99 [ "$up" ] && rm -f ${tools}/${t}
pankso@31 100 if [ ! -f "$data/$t" ]; then
pankso@31 101 echo -n "Fetching: $t"
pankso@31 102 wget -q --no-check-certificate ${tools_url}${t} \
pankso@35 103 -O ${tools}/${t}; status
pankso@31 104 fi
pankso@31 105 done
pankso@31 106 }
pankso@31 107
pankso@31 108 # Configure overclocking
pankso@31 109 set_oclock() {
pankso@31 110 case "$oclock" in
pankso@31 111 none)
pankso@31 112 arm_freq=700
pankso@31 113 core_freq=250
pankso@31 114 sdram_freq=400
pankso@31 115 over_voltage=0 ;;
pankso@31 116 modest)
pankso@31 117 arm_freq=800
pankso@31 118 core_freq=300
pankso@31 119 sdram_freq=400
pankso@31 120 over_voltage=0 ;;
pankso@31 121 medium)
pankso@31 122 arm_freq=900
pankso@31 123 core_freq=333
pankso@31 124 sdram_freq=450
pankso@31 125 over_voltage=2 ;;
pankso@31 126 hight)
pankso@31 127 arm_freq=950
pankso@31 128 core_freq=450
pankso@31 129 sdram_freq=450
pankso@31 130 over_voltage=6 ;;
pankso@31 131 turbo)
pankso@31 132 arm_freq=1000
pankso@31 133 core_freq=500
pankso@31 134 sdram_freq=500
pankso@31 135 over_voltage=6 ;;
pankso@31 136 esac
pankso@31 137 cat >> ${boot}/config.txt << EOT
pankso@31 138 arm_freq=$arm_freq
pankso@31 139 core_freq=$core_freq
pankso@31 140 sdram_freq=$sdram_freq
pankso@31 141 over_voltage=$over_voltage
pankso@31 142 EOT
pankso@31 143 }
pankso@31 144
pankso@31 145 #
pankso@31 146 # Commands
pankso@31 147 #
pankso@31 148
pankso@31 149 case "$1" in
pankso@31 150 info)
pankso@31 151 header "SliTaz Raspberry Pi info"
pankso@31 152 echo "Firmware : $fwlist"
pankso@35 153 echo "RPi path : $rpi"
pankso@31 154 colorize 36 "/boot/cmdline.txt:"
pankso@31 155 cat ${boot}/cmdline.txt
pankso@31 156 colorize 36 "/boot/config.txt:"
pankso@31 157 cat ${boot}/config.txt
pankso@31 158 separator && newline ;;
pankso@31 159
pankso@31 160 install)
pankso@31 161 rpiboot="/media/rpi/boot"
pankso@31 162 rpiroot="/media/rpi/rootfs"
pankso@31 163 header "SliTaz Raspberry Pi install"
pankso@31 164 if [ ! "$dev" ]; then
pankso@31 165 echo "Missing: --dev= cmdline option" && exit 1
pankso@31 166 fi
pankso@31 167
pankso@31 168 # Store sdcard partition(s) list
pankso@31 169 fdisk -l /dev/${dev} | grep "^/dev/$dev" | awk '{print $1}' \
pankso@31 170 > ${data}/sdcard.part
pankso@31 171 partnb=$(cat ${data}/sdcard.part | wc -l)
pankso@31 172 if [ "$partnb" != 3 ]; then
paul@32 173 error "SliTaz RPi needs 3 partitions on the sdcard"
pankso@31 174 newline && exit 1
pankso@31 175 fi
pankso@31 176
pankso@31 177 # Mount sdcard
pankso@31 178 if mount | grep -q "^/dev/$dev[1-3]"; then
pankso@31 179 debug "Unmounting: /dev/$dev"
pankso@31 180 umount /dev/${dev}1 2>/dev/null || exit 1
pankso@31 181 umount /dev/${dev}3 2>/dev/null || exit 1
pankso@31 182 fi
pankso@31 183 echo -n "Mounting: /dev/$dev partitions"
pankso@31 184 mkdir -p ${rpiboot} ${rpiroot}
pankso@31 185 mount /dev/${dev}1 ${rpiboot}
pankso@31 186 mount /dev/${dev}3 ${rpiroot}; status
pankso@31 187 echo -n "Installing: boot files"
pankso@31 188 cp -rf ${boot}/* ${rpiboot}; status
pankso@31 189 echo -n "Installing: rootfs files"
pankso@31 190 cp -a ${rootfs}/* ${rpiroot}; status
pankso@31 191
pankso@31 192 # Unmount
pankso@31 193 echo -n "Unmounting: RPi sdcard"
pankso@31 194 umount ${rpiboot} || exit 1
pankso@31 195 umount ${rpiroot} || exit 1
pankso@31 196 status
pankso@31 197
pankso@31 198 # Boot flag
pankso@31 199 #echo -n "Setting boot flag on: /dev/${dev}1"
pankso@31 200 #fdisk /dev/${dev} >/dev/null << EOF
pankso@31 201 #a
pankso@31 202 #1
pankso@31 203 #w
pankso@31 204 #EOF
pankso@31 205 #status
pankso@31 206 rm -f ${data}/sdcard.part
pankso@31 207 separator && newline ;;
pankso@31 208
pankso@31 209 ls-dev)
pankso@31 210 newline
pankso@31 211 fdisk -l | grep "^Disk /dev/sd*"
pankso@31 212 newline ;;
pankso@31 213
pankso@31 214 gen)
pankso@31 215 # Separate boot files since the Raspberry Pi boots off a FAT32 /boot
pankso@31 216 # partition on the sdcard.
pankso@31 217 : ${flavor=rpi}
pankso@31 218 : ${oclock=none}
pankso@31 219 check_root
pankso@31 220 rm -rf ${rootfs} ${boot}
pankso@31 221 mkdir -p ${boot}
pankso@31 222
pankso@31 223 # Use the rootfs generated by sat
pankso@31 224 if [ ! -x "/usr/bin/sat" ]; then
pankso@31 225 error "Sat is not installed" && exit 1
pankso@31 226 fi
pankso@31 227 [ "$clean" ] && sat clean --work="$work"
pankso@31 228 if [ ! -d "$distro/rootfs/etc" ]; then
pankso@33 229 sat gen --work="$work" --flavor="$flavor" \
pankso@33 230 --kmap --spk --noinit --rpi
pankso@31 231 fi
pankso@31 232 header "SliTaz Raspberry Pi distro"
pankso@31 233 dsize="$(du -sh ${distro}/rootfs | awk '{print $1}')"
pankso@35 234 echo -n "Copying: rootfs ($dsize)"
pankso@31 235 cp -a ${distro}/rootfs ${rootfs}; status
pankso@31 236
pankso@31 237 # Boot firmware
pankso@35 238 echo -n "Copying: firmware files..."
pankso@31 239 get_fw
pankso@35 240 for fw in $fwlist
pankso@35 241 do
pankso@35 242 cp $firmware/boot/${fw} ${boot}
pankso@35 243 done
pankso@35 244 status
pankso@31 245
pankso@35 246 # SliTaz Raspberry Pi custom rootfs files. Make sure all files
pankso@35 247 # belong to root
pankso@35 248 if [ -d "$work/rootfs" ]; then
pankso@35 249 size=$(du -sh $work/rootfs | awk '{print $1}')
pankso@35 250 echo -n "Copying: SliTaz RPi rootfs ($size)"
pankso@35 251 tmp=$distro/tmp-$$
pankso@35 252 mkdir -p $tmp
pankso@35 253 cp -r $work/rootfs/* $tmp
pankso@35 254 chown -R root.root $tmp
pankso@35 255 cp -a $tmp/* ${rootfs} && rm -rf $tmp
pankso@35 256 status
pankso@35 257 fi
pankso@31 258
pankso@31 259 # /boot/config.txt
pankso@31 260 echo -n "Creating: /boot/config.txt"
pankso@31 261 echo 'kernel=kernel.img' > ${boot}/config.txt
pankso@31 262 set_oclock; status
pankso@31 263 if [ "$turbo" ]; then
pankso@31 264 echo "force_turbo=1" >> ${boot}/config.txt
pankso@31 265 fi
pankso@31 266
pankso@31 267 # /etc/fstab
pankso@31 268 echo -n "Creating: /etc/fstab"
pankso@31 269 cat > ${rootfs}/etc/fstab << EOT
pankso@31 270 # /etc/fstab: Slitaz ARM static filesystems.
pankso@31 271 #
pankso@34 272 proc /proc proc defaults 0 0
pankso@34 273 sysfs /sys sysfs defaults 0 0
pankso@34 274 /dev/mmcblk0p1 /boot auto noauto,noatime 1 2
pankso@34 275 /dev/mmcblk0p2 none swap sw 0 0
pankso@34 276 /dev/mmcblk0p3 / ext4 noatime 0 1
pankso@31 277 EOT
pankso@31 278 status
pankso@31 279
pankso@31 280 # Kernel
pankso@31 281 kvers=$(ls $data/linux-*/fs/lib/modules)
pankso@31 282 kpkg="$rootfs/var/lib/tazpkg/installed/linux"
pankso@31 283 if [ -d "$data/linux-$kvers/fs" ]; then
pankso@35 284 echo -n "Copying: Linux Kernel $kvers"
pankso@31 285 rm -rf ${rootfs}/lib/modules
pankso@31 286 cp -rf ${data}/linux-${kvers}/fs/lib/* ${rootfs}/lib
pankso@31 287 cp -f ${data}/linux-${kvers}/fs/boot/* ${boot}
pankso@31 288 mkdir -p ${kpkg}
pankso@31 289 cd ${data}/linux-${kvers}
pankso@31 290 cp -f files.list md5sum receipt ${kpkg}
pankso@31 291 status
pankso@31 292 else
pankso@31 293 echo "RPi Kernel: not used"
pankso@31 294 fi
pankso@31 295 mkdir -p ${rootfs}/boot
pankso@33 296
pankso@33 297 # RPi VC libraries
pankso@33 298 if [ "$vc" ]; then
pankso@33 299 echo "Installing: VC libraries"
pankso@33 300 echo "TODO"
pankso@33 301 fi
pankso@33 302
pankso@31 303 separator
pankso@31 304 echo -n "Boot: $(du -sh $boot | awk '{print $1}') "
pankso@31 305 echo "- Rootfs: $(du -sh $rootfs | awk '{print $1}')"
pankso@31 306 newline ;;
pankso@31 307
pankso@35 308 cook-linux)
pankso@31 309 # Native SliTaz Toolchain and cross toolchain must be installed
pankso@31 310 check_root
pankso@31 311 #: ${arch=armv6hf}
pankso@31 312 : ${arch=arm}
pankso@31 313 install="$data/linux-install"
pankso@31 314 if [ ! -d "/cross/$arch" ]; then
pankso@31 315 error "Missing cross toolchain in: /cross/$arch"
pankso@31 316 exit 1
pankso@31 317 fi
pankso@31 318 # Kernel source
pankso@35 319 [ -d "$kernel" ] || git clone --depth 1 ${rpi_git_url}linux.git
pankso@31 320
pankso@31 321 if [ ! -d "$install" ]; then
pankso@31 322 cd ${kernel}
pankso@31 323 export PATH=$PATH:/cross/${arch}/tools/bin
pankso@31 324 export HOST_SYSTEM=${arch}-slitaz-linux-gnueabi
pankso@31 325 make ARCH=arm bcmrpi_defconfig &&
pankso@31 326 make ARCH=arm CROSS_COMPILE=${HOST_SYSTEM}- zImage &&
pankso@31 327 make ARCH=arm CROSS_COMPILE=${HOST_SYSTEM}- modules &&
pankso@31 328 make ARCH=arm CROSS_COMPILE=${HOST_SYSTEM}- \
pankso@31 329 INSTALL_MOD_PATH=${install} modules_install || exit 1
pankso@31 330 mkdir -p ${install}/boot
pankso@31 331 cp -a arch/arm/boot/zImage ${install}/boot
pankso@31 332 fi
pankso@31 333
pankso@35 334 # Compress all modules
pankso@35 335 #echo -n "Searching all modules to compress them... "
pankso@35 336 #find . -name "*.ko" -exec xz '{}' \; 2> /dev/null
pankso@35 337
pankso@31 338 # Pack
pankso@31 339 fs="$data/linux-$kvers/fs"
pankso@31 340 kvers=$(ls ${install}/lib/modules)
pankso@31 341 newline
pankso@31 342 echo "Kernel version: $kvers"
pankso@31 343 if [ -d "$install" ]; then
pankso@31 344 rm -rf ${data}/linux-${kvers}
pankso@31 345 mkdir -p ${data}/linux-${kvers}
pankso@31 346 cp -a ${install} ${fs}
pankso@31 347 rm ${fs}/lib/modules/build ${fs}/lib/modules/source
pankso@31 348 fi
pankso@31 349 get_tools
pankso@31 350 echo "Compressing: zImage to kernel.img"
pankso@35 351 cd ${tools}
pankso@35 352 python imagetool-uncompressed.py ${fs}/boot/zImage
pankso@31 353 cd ${data}
pankso@31 354 mv kernel.img ${fs}/boot && rm ${fs}/boot/zImage
pankso@31 355 echo "Creating package: receipt"
pankso@31 356 cat > linux-$kvers/receipt << EOT
pankso@31 357 # SliTaz package receipt
pankso@31 358
pankso@31 359 PACKAGE="linux"
pankso@31 360 VERSION="$kvers"
pankso@31 361 SHORT_DESC="SliTaz Linux Kernel for the Raspberry Pi."
pankso@31 362 WEB_SITE="http://www.kernel.org"
pankso@31 363
pankso@31 364 EOT
pankso@31 365 tazpkg pack linux-$kvers ;;
pankso@31 366
pankso@31 367 get-fw)
pankso@31 368 get_fw ;;
pankso@31 369
pankso@31 370 get-tools)
pankso@31 371 get_tools ;;
pankso@31 372
pankso@31 373 get-linux)
pankso@31 374 # Precook RPi kernel
pankso@35 375 mkdir -p ${data}
pankso@31 376 rm -f ${data}/linux-version.txt
pankso@35 377 if busybox wget -q -s ${rpi_mirror}/last-linux.txt; then
pankso@31 378 echo -n "Fetching latest Kernel string..."
pankso@35 379 wget -q ${rpi_mirror}/last-linux.txt \
pankso@31 380 -O ${data}/linux-version.txt || exit 1
pankso@31 381 status
pankso@31 382 else
paul@32 383 echo "Mirror is unreachable" && exit 1
pankso@31 384 fi
pankso@31 385 kvers=$(cat $data/linux-version.txt)
pankso@31 386 [ "$up" ] && rm -rf ${data}/linux-${kvers}*
pankso@31 387 echo "Kernel version: $kvers"
pankso@31 388 # Download
pankso@31 389 if [ ! -f "$data/linux-$kvers.tazpkg" ]; then
pankso@31 390 echo -n "Fetching latest Linux package..."
pankso@35 391 wget -q ${rpi_mirror}/linux-${kvers}.tazpkg \
pankso@31 392 -O ${data}/linux-${kvers}.tazpkg; status
pankso@31 393 fi
pankso@31 394 # Extract
pankso@31 395 if [ ! -d "$data/linux-$kvers" ]; then
pankso@31 396 cd ${data} && tazpkg extract linux-${kvers}.tazpkg
pankso@31 397 fi ;;
pankso@31 398
pankso@31 399 get-prebuilt)
pankso@31 400 # --> in cross ??
pankso@31 401 : ${arch=arm}
pankso@31 402 name="slitaz-$arch-toolchain"
pankso@31 403 vers="20140304"
pankso@31 404 tarball="$name-$vers.tar.bz2"
pankso@31 405 url="http://mirror.slitaz.org/packages/cross/"
pankso@31 406 mkdir -p /cross
pankso@31 407 cd /cross
pankso@31 408 if [ ! -f "$tarball" ]; then
pankso@31 409 if busybox wget -qs ${url%/}/${tarball}; then
pankso@31 410 busybox wget ${url%/}/${tarball}
pankso@31 411 else
pankso@31 412 echo "Toolchain URL is unreachable" && exit 1
pankso@31 413 fi
pankso@31 414 fi
pankso@31 415 if [ ! -d "${name}-${vers}" ]; then
pankso@31 416 echo "Extracting: $tarball"
pankso@31 417 tar xjf ${tarball}
pankso@31 418 fi
pankso@31 419 echo "Copying: ${name}-${vers}/${arch}"
pankso@31 420 mkdir -p ${arch}
pankso@31 421 cp -a ${name}-${vers}/${arch}/* ${arch}
pankso@31 422 echo "Tools path: /cross/${arch}/tools/bin" ;;
pankso@31 423
pankso@35 424 clone-fw)
pankso@35 425 clone_fw ;;
pankso@35 426
pankso@31 427 oclock)
pankso@31 428 cat << EOT
pankso@31 429
pankso@31 430 $(boldify "Overclocking modes:")
pankso@31 431 none 700MHz ARM 250MHz core 400MHz SDRAM 0 overvolt
pankso@31 432 modest 800MHz ARM 300MHz core 400MHz SDRAM 0 overvolt
pankso@31 433 medium 900MHz ARM 333MHz core 450MHz SDRAM 2 overvolt
pankso@31 434 high 950MHz ARM 450MHz core 450MHz SDRAM 6 overvolt
pankso@31 435 turbo 1000MHz ARM 500MHz core 500MHz SDRAM 6 overvolt
pankso@31 436
pankso@31 437 EOT
pankso@31 438 if [ -f "$boot/config.txt" ]; then
pankso@31 439 boldify "Current config.txt:"
pankso@31 440 cat ${boot}/config.txt
pankso@31 441 newline
pankso@31 442 fi ;;
pankso@31 443 *) usage ;;
pankso@31 444 esac
pankso@31 445 exit 0