mirror of
https://github.com/agherzan/meta-raspberrypi.git
synced 2025-12-25 13:41:25 +00:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1ad98cf651 |
27
.github/ISSUE_TEMPLATE.md
vendored
27
.github/ISSUE_TEMPLATE.md
vendored
@@ -1,27 +0,0 @@
|
||||
<!--
|
||||
If you are reporting a new issue, make sure that we do not have any duplicates
|
||||
already open. You can ensure this by searching the issue list for this
|
||||
repository. If there is a duplicate, please close your issue and add a comment
|
||||
to the existing issue instead.
|
||||
-->
|
||||
|
||||
**Description**
|
||||
|
||||
<!--
|
||||
Briefly describe the problem you are having in a few paragraphs.
|
||||
-->
|
||||
|
||||
**Steps to reproduce the issue:**
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
|
||||
**Describe the results you received:**
|
||||
|
||||
|
||||
**Describe the results you expected:**
|
||||
|
||||
|
||||
**Additional information you deem important (e.g. issue happens only occasionally):**
|
||||
|
||||
**Additional details (revisions used, host distro, etc.):**
|
||||
16
.github/PULL_REQUEST_TEMPLATE.md
vendored
16
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -1,16 +0,0 @@
|
||||
<!--
|
||||
Please make sure you've read and understood our contributing guidelines.
|
||||
|
||||
For additional information on the contribution guidelines:
|
||||
https://wiki.yoctoproject.org/wiki/Contribution_Guidelines#General_Information
|
||||
|
||||
If this PR fixes an issue, make sure your description includes "fixes #xxxx".
|
||||
|
||||
If this PR connects to an issue, make sure your description includes "connected to #xxxx".
|
||||
|
||||
Please provide the following information:
|
||||
-->
|
||||
|
||||
**- What I did**
|
||||
|
||||
**- How I did it**
|
||||
7
.gitignore
vendored
7
.gitignore
vendored
@@ -1,7 +0,0 @@
|
||||
build*
|
||||
*~
|
||||
.*.swp
|
||||
*.orig
|
||||
*.rej
|
||||
*.log
|
||||
docs/_build
|
||||
142
README
Normal file
142
README
Normal file
@@ -0,0 +1,142 @@
|
||||
.8MMMMMMMM MMMMMMMM8.
|
||||
MMM77$$$$$$7MM MM$$$$$$$$$MMM
|
||||
MM$$$$$$$$$$$$M M$$$$$$$$$$$$MM
|
||||
MO7$$$$$8$$$$$MMM$$$$$N7$$$$7DM
|
||||
M7$$$$$$$M7$$MMM$$7M$$$$$$$7M.
|
||||
M7$$$$$$$$MMMMMMM$$$$$$$$7M.
|
||||
MM$$$$$$7MMMMMMM$$$$$$$MM
|
||||
.MM$7MMMMMMMMMMMMM7$MM.
|
||||
.MM8ZZZMMZZZZZZZMZZZ$MM.
|
||||
.MOZZZZMMZZZZZZZZZM8ZZZZMM
|
||||
MZZMMMZZZZ8MMMMM$ZZZ$MMZZMM
|
||||
.MMMMMZZZZZZZZMMMZZZZZZZMMMMM:
|
||||
M8ZZMMZZZZZZZZNMZZZZZZZZZMMZZMM
|
||||
MZZZZMZZZZZZZZZMMMZZZZZZZZ8MZZZMM
|
||||
.MZZZZMZZZZZZZZZMMMZZZZZZZZMMZZZ8M
|
||||
.MZZZMMMZZZZZZZMMMMM$ZZZZZ$MMZZZMM
|
||||
MMZZMMMMMM8MMNZZZZZ8MMMMMMMMMZZM
|
||||
MMMMZMMMMMMZZZZZZZZZMMMM$ZZZMM.
|
||||
MMZZZZZMMMZZZZZZZZZMMMZZZZZMM
|
||||
MZZZZZZZMNZZZZZZZMMZZZZZZZM.
|
||||
MMMMMZZZZZZZZZMMMM.
|
||||
.MMDZZZZZZZMMD
|
||||
.MMMMMMMM,
|
||||
....
|
||||
|
||||
|
||||
OpenEmbedded BSP Layer - RaspberryPi
|
||||
--------------------------------------
|
||||
|
||||
This is the general hardware specific BSP overlay for the RaspberryPi device.
|
||||
It should be used with openembedded-core (not old-style org.openembedded.dev).
|
||||
|
||||
More information can be found at:
|
||||
|
||||
http://www.raspberrypi.org/ (Official Site)
|
||||
http://www.distant-earth.com/ (My Site)
|
||||
|
||||
Build scripts patched to support making a firmware image for the RaspberryPi with Angstrom can be found at:
|
||||
|
||||
http://github.com/Angstrom-distribution/setup-scripts
|
||||
|
||||
When not depending on meta-openembedded and not using systemd, you may need to
|
||||
mask few recipes requiring systemd or other recipes not included in your distribution of choice.
|
||||
|
||||
You can achieve this by adding something like the following to local.conf:
|
||||
|
||||
BBMASK = "meta-raspberrypi/recipes-multimedia/libav|meta-raspberrypi/recipes-core/systemd"
|
||||
|
||||
You can adjust the BBMASK for any .bbappends that your distribution does not contain recipes for.
|
||||
|
||||
The core BSP part of meta-raspberrypi should work with different OpenEmbedded/Yocto
|
||||
distributions and layer stacks, such as:
|
||||
|
||||
* Distro-less (only with OE-Core).
|
||||
* Angstrom (main focus of testing).
|
||||
* Yocto/Poky.
|
||||
|
||||
This layer in its entirety depends on:
|
||||
|
||||
URI: git://git.openembedded.org/openembedded-core
|
||||
branch: master
|
||||
revision: HEAD
|
||||
|
||||
URI: git://git.openembedded.org/meta-openembedded
|
||||
branch: master
|
||||
revision: HEAD
|
||||
|
||||
It is preferred that people raise pull requests using GIThub by forking the appropriate tree:
|
||||
|
||||
https://github.com/djwillis/
|
||||
(More info on achieving this can be found at http://help.github.com/send-pull-requests/)
|
||||
|
||||
Yocto BSP Layer - RaspberryPi
|
||||
-------------------------------
|
||||
|
||||
This layer depends on:
|
||||
|
||||
URI: git://git.yoctoproject.org/poky
|
||||
branch: danny
|
||||
revision: HEAD
|
||||
|
||||
URI: git://git.openembedded.org/meta-openembedded
|
||||
branch: master
|
||||
revision: 1571c2c566c51799eceea2aabe13d1c3116f36b3
|
||||
|
||||
How to use it:
|
||||
|
||||
1. source poky/oe-init-build-env rpi-build
|
||||
2. Add needed layers to bblayers.conf:
|
||||
- meta-raspberrypi
|
||||
- meta-openembedded/meta-oe
|
||||
3 Set MACHINE to raspberrypi in local.conf
|
||||
4. bitbake rpi-hwup-image
|
||||
5. dd to a SD card the generated sdimg file (use xzcat if rpi-sdimg.xz is used)
|
||||
6. Boot your RPI.
|
||||
|
||||
Optional - compressed deployed files:
|
||||
=====================================
|
||||
1. Overwrite IMAGE_FSTYPES in local.conf
|
||||
IMAGE_FSTYPES = "tar.bz2 ext3.xz rpi-sdimg.xz
|
||||
2. Overwrite SDIMG_ROOTFS_TYPE in local.conf
|
||||
SDIMG_ROOTFS_TYPE = "ext3.xz"
|
||||
*Accommodate the values above to your own needs (ex: ext3 / ext4).
|
||||
|
||||
Optional - GPU firmware:
|
||||
========================
|
||||
By default the GPU firmware shipped is arm192. You can overwrite this using the
|
||||
variable RPI_GPU_FIRMWARE with one of the values below.
|
||||
# arm128 : 128M ARM, 128M GPU split
|
||||
# arm192 : 192M ARM, 64M GPU split
|
||||
# arm224 : 224M ARM, 32M GPU split
|
||||
# arm240 : 240M ARM, 16M GPU split
|
||||
|
||||
Optional - Add purchased license codecs:
|
||||
========================================
|
||||
To add you own licenses use variables KEY_DECODE_MPG2 and KEY_DECODE_WVC1 in local.conf. Example:
|
||||
KEY_DECODE_MPG2 = "12345678"
|
||||
KEY_DECODE_WVC1 = "12345678"
|
||||
You can supply more licenses separated by comma. Example:
|
||||
KEY_DECODE_WVC1 = "0x12345678,0xabcdabcd,0x87654321"
|
||||
|
||||
Optional - Disable overscan:
|
||||
============================
|
||||
By default the GPU adds a black border around the video output to compensate for TVs
|
||||
which cut off part of the image. To disable this set this variable in
|
||||
local.conf:
|
||||
DISALE_OVERSCAN = "0"
|
||||
|
||||
Optional - Set overclocking options:
|
||||
====================================
|
||||
The Raspberry PI can be overclocked. As of now overclocking up to the "Turbo
|
||||
Mode" is officially supported by the raspbery and does not void warranty.
|
||||
Check the config.txt for a detailed description of options and modes. Example:
|
||||
# Turbo mode
|
||||
ARM_FREQ = "1000"
|
||||
CORE_FREQ = "500"
|
||||
SDRAM_FREQ = "500"
|
||||
OVER_VOLTAGE = "6"
|
||||
|
||||
|
||||
Layer maintainer: John Willis <John.Willis at distant-earth.com>
|
||||
Andrei Gherzan <andrei at gherzan.ro>
|
||||
55
README.md
55
README.md
@@ -1,55 +0,0 @@
|
||||
# meta-raspberrypi
|
||||
|
||||
Yocto BSP layer for the Raspberry Pi boards - <http://www.raspberrypi.org/>.
|
||||
|
||||
[](https://yocto-ci.resin.io/job/meta-raspberrypi1)
|
||||
[](https://yocto-ci.resin.io/job/meta-raspberrypi2)
|
||||
[](https://yocto-ci.resin.io/job/meta-raspberrypi3)
|
||||
[](https://gitter.im/agherzan/meta-raspberrypi)
|
||||
|
||||
## Quick links
|
||||
|
||||
* Git repository web frontend:
|
||||
<http://git.yoctoproject.org/cgit/cgit.cgi/meta-raspberrypi/>
|
||||
* Mailing list (yocto mailing list): <yocto@yoctoproject.org>
|
||||
* Issues management (Github Issues):
|
||||
<https://github.com/agherzan/meta-raspberrypi/issues>
|
||||
|
||||
## Description
|
||||
|
||||
This is the general hardware specific BSP overlay for the RaspberryPi device.
|
||||
|
||||
More information can be found at: <http://www.raspberrypi.org/> (Official Site)
|
||||
|
||||
The core BSP part of meta-raspberrypi should work with different
|
||||
OpenEmbedded/Yocto distributions and layer stacks, such as:
|
||||
|
||||
* Distro-less (only with OE-Core).
|
||||
* Angstrom.
|
||||
* Yocto/Poky (main focus of testing).
|
||||
|
||||
## Dependencies
|
||||
|
||||
This layer depends on:
|
||||
|
||||
* URI: git://git.yoctoproject.org/poky
|
||||
* branch: pyro
|
||||
* revision: HEAD
|
||||
|
||||
* URI: git://git.openembedded.org/meta-openembedded
|
||||
* layers: meta-oe, meta-multimedia, meta-networking, meta-python
|
||||
* branch: pyro
|
||||
* revision: HEAD
|
||||
|
||||
## Quick Start
|
||||
|
||||
1. source poky/oe-init-build-env rpi-build
|
||||
2. Add this layer to bblayers.conf and the dependencies above
|
||||
3. Set MACHINE in local.conf to one of the supported boards
|
||||
4. bitbake rpi-hwup-image
|
||||
5. dd to a SD card the generated sdimg file (use xzcat if rpi-sdimg.xz is used)
|
||||
6. Boot your RPI.
|
||||
|
||||
## Maintainers
|
||||
|
||||
* Andrei Gherzan `<andrei at gherzan.ro>`
|
||||
@@ -1,29 +0,0 @@
|
||||
inherit linux-kernel-base
|
||||
|
||||
def get_dts(d, ver=None):
|
||||
import re
|
||||
|
||||
staging_dir = d.getVar("STAGING_KERNEL_BUILDDIR")
|
||||
dts = d.getVar("KERNEL_DEVICETREE")
|
||||
|
||||
# d.getVar() might return 'None' as a normal string
|
||||
# leading to 'is None' check isn't enough.
|
||||
# TODO: Investigate if this is a bug in bitbake
|
||||
if ver is None or ver == "None":
|
||||
''' if 'ver' isn't set try to grab the kernel version
|
||||
from the kernel staging '''
|
||||
ver = get_kernelversion_file(staging_dir)
|
||||
|
||||
return dts
|
||||
|
||||
|
||||
def split_overlays(d, out, ver=None):
|
||||
dts = get_dts(d, ver)
|
||||
if out:
|
||||
overlays = oe.utils.str_filter_out('\S+\-overlay\.dtb$', dts, d)
|
||||
overlays = oe.utils.str_filter_out('\S+\.dtbo$', overlays, d)
|
||||
else:
|
||||
overlays = oe.utils.str_filter('\S+\-overlay\.dtb$', dts, d) + \
|
||||
" " + oe.utils.str_filter('\S+\.dtbo$', dts, d)
|
||||
|
||||
return overlays
|
||||
@@ -1,5 +1,4 @@
|
||||
inherit image_types
|
||||
inherit linux-raspberrypi-base
|
||||
|
||||
#
|
||||
# Create an image that can by written onto a SD card using dd.
|
||||
@@ -14,129 +13,88 @@ inherit linux-raspberrypi-base
|
||||
# Default Free space = 1.3x
|
||||
# Use IMAGE_OVERHEAD_FACTOR to add more space
|
||||
# <--------->
|
||||
# 4MiB 40MiB SDIMG_ROOTFS
|
||||
# 4KiB 20MiB SDIMG_ROOTFS
|
||||
# <-----------------------> <----------> <---------------------->
|
||||
# ------------------------ ------------ ------------------------
|
||||
# | IMAGE_ROOTFS_ALIGNMENT | BOOT_SPACE | ROOTFS_SIZE |
|
||||
# ------------------------ ------------ ------------------------
|
||||
# ^ ^ ^ ^
|
||||
# | | | |
|
||||
# 0 4MiB 4MiB + 40MiB 4MiB + 40Mib + SDIMG_ROOTFS
|
||||
# ------------------------ ------------ ------------------------ -------------------------------
|
||||
# | IMAGE_ROOTFS_ALIGNMENT | BOOT_SPACE | ROOTFS_SIZE | IMAGE_ROOTFS_ALIGNMENT |
|
||||
# ------------------------ ------------ ------------------------ -------------------------------
|
||||
# ^ ^ ^ ^ ^
|
||||
# | | | | |
|
||||
# 0 4096 4KiB + 20MiB 4KiB + 20Mib + SDIMG_ROOTFS 4KiB + 20MiB + SDIMG_ROOTFS + 4KiB
|
||||
|
||||
# This image depends on the rootfs image
|
||||
IMAGE_TYPEDEP_rpi-sdimg = "${SDIMG_ROOTFS_TYPE}"
|
||||
|
||||
# Set kernel and boot loader
|
||||
IMAGE_BOOTLOADER ?= "bcm2835-bootfiles"
|
||||
|
||||
# Set initramfs extension
|
||||
KERNEL_INITRAMFS ?= ""
|
||||
|
||||
# Kernel image name
|
||||
SDIMG_KERNELIMAGE_raspberrypi ?= "kernel.img"
|
||||
SDIMG_KERNELIMAGE_raspberrypi2 ?= "kernel7.img"
|
||||
SDIMG_KERNELIMAGE_raspberrypi3-64 ?= "kernel8.img"
|
||||
|
||||
# Boot partition volume id
|
||||
BOOTDD_VOLUME_ID ?= "${MACHINE}"
|
||||
|
||||
# Boot partition size [in KiB] (will be rounded up to IMAGE_ROOTFS_ALIGNMENT)
|
||||
BOOT_SPACE ?= "40960"
|
||||
# Boot partition size [in KiB]
|
||||
BOOT_SPACE ?= "20480"
|
||||
|
||||
# Set alignment to 4MB [in KiB]
|
||||
IMAGE_ROOTFS_ALIGNMENT = "4096"
|
||||
|
||||
# Use an uncompressed ext3 by default as rootfs
|
||||
SDIMG_ROOTFS_TYPE ?= "ext3"
|
||||
SDIMG_ROOTFS = "${IMGDEPLOYDIR}/${IMAGE_NAME}.rootfs.${SDIMG_ROOTFS_TYPE}"
|
||||
SDIMG_ROOTFS = "${IMAGE_NAME}.rootfs.${SDIMG_ROOTFS_TYPE}"
|
||||
|
||||
RPI_GPU_FIRMWARE ?= "arm192"
|
||||
|
||||
IMAGE_DEPENDS_rpi-sdimg = " \
|
||||
parted-native \
|
||||
mtools-native \
|
||||
dosfstools-native \
|
||||
virtual/kernel:do_deploy \
|
||||
virtual/kernel \
|
||||
${IMAGE_BOOTLOADER} \
|
||||
${@bb.utils.contains('KERNEL_IMAGETYPE', 'uImage', 'u-boot', '',d)} \
|
||||
"
|
||||
|
||||
# SD card image name
|
||||
SDIMG = "${IMGDEPLOYDIR}/${IMAGE_NAME}.rootfs.rpi-sdimg"
|
||||
|
||||
# Compression method to apply to SDIMG after it has been created. Supported
|
||||
# compression formats are "gzip", "bzip2" or "xz". The original .rpi-sdimg file
|
||||
# is kept and a new compressed file is created if one of these compression
|
||||
# formats is chosen. If SDIMG_COMPRESSION is set to any other value it is
|
||||
# silently ignored.
|
||||
#SDIMG_COMPRESSION ?= ""
|
||||
SDIMG = "${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.rpi-sdimg"
|
||||
|
||||
# Additional files and/or directories to be copied into the vfat partition from the IMAGE_ROOTFS.
|
||||
FATPAYLOAD ?= ""
|
||||
|
||||
# SD card vfat partition image name
|
||||
SDIMG_VFAT = "${IMAGE_NAME}.vfat"
|
||||
SDIMG_LINK_VFAT = "${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.vfat"
|
||||
IMAGEDATESTAMP = "${@time.strftime('%Y.%m.%d',time.gmtime())}"
|
||||
|
||||
IMAGE_CMD_rpi-sdimg () {
|
||||
|
||||
# Align partitions
|
||||
BOOT_SPACE_ALIGNED=$(expr ${BOOT_SPACE} + ${IMAGE_ROOTFS_ALIGNMENT} - 1)
|
||||
BOOT_SPACE_ALIGNED=$(expr ${BOOT_SPACE_ALIGNED} - ${BOOT_SPACE_ALIGNED} % ${IMAGE_ROOTFS_ALIGNMENT})
|
||||
SDIMG_SIZE=$(expr ${IMAGE_ROOTFS_ALIGNMENT} + ${BOOT_SPACE_ALIGNED} + $ROOTFS_SIZE)
|
||||
|
||||
echo "Creating filesystem with Boot partition ${BOOT_SPACE_ALIGNED} KiB and RootFS $ROOTFS_SIZE KiB"
|
||||
|
||||
# Check if we are building with device tree support
|
||||
DTS="${@get_dts(d)}"
|
||||
SDIMG_SIZE=$(expr ${IMAGE_ROOTFS_ALIGNMENT} + ${BOOT_SPACE_ALIGNED} + $ROOTFS_SIZE + ${IMAGE_ROOTFS_ALIGNMENT})
|
||||
|
||||
# Initialize sdcard image file
|
||||
dd if=/dev/zero of=${SDIMG} bs=1024 count=0 seek=${SDIMG_SIZE}
|
||||
dd if=/dev/zero of=${SDIMG} bs=1 count=0 seek=$(expr 1024 \* ${SDIMG_SIZE})
|
||||
|
||||
# Create partition table
|
||||
parted -s ${SDIMG} mklabel msdos
|
||||
# Create boot partition and mark it as bootable
|
||||
parted -s ${SDIMG} unit KiB mkpart primary fat32 ${IMAGE_ROOTFS_ALIGNMENT} $(expr ${BOOT_SPACE_ALIGNED} \+ ${IMAGE_ROOTFS_ALIGNMENT})
|
||||
parted -s ${SDIMG} set 1 boot on
|
||||
# Create rootfs partition to the end of disk
|
||||
parted -s ${SDIMG} -- unit KiB mkpart primary ext2 $(expr ${BOOT_SPACE_ALIGNED} \+ ${IMAGE_ROOTFS_ALIGNMENT}) -1s
|
||||
# Create rootfs partition
|
||||
parted -s ${SDIMG} unit KiB mkpart primary ext2 $(expr ${BOOT_SPACE_ALIGNED} \+ ${IMAGE_ROOTFS_ALIGNMENT}) $(expr ${BOOT_SPACE_ALIGNED} \+ ${IMAGE_ROOTFS_ALIGNMENT} \+ ${ROOTFS_SIZE})
|
||||
parted ${SDIMG} print
|
||||
|
||||
# Create a vfat image with boot files
|
||||
BOOT_BLOCKS=$(LC_ALL=C parted -s ${SDIMG} unit b print | awk '/ 1 / { print substr($4, 1, length($4 -1)) / 512 /2 }')
|
||||
rm -f ${WORKDIR}/boot.img
|
||||
mkfs.vfat -n "${BOOTDD_VOLUME_ID}" -S 512 -C ${WORKDIR}/boot.img $BOOT_BLOCKS
|
||||
mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/bcm2835-bootfiles/* ::/
|
||||
if test -n "${DTS}"; then
|
||||
# Device Tree Overlays are assumed to be suffixed by '-overlay.dtb' (4.1.x) or by '.dtbo' (4.4.9+) string and will be put in a dedicated folder
|
||||
DT_OVERLAYS="${@split_overlays(d, 0)}"
|
||||
DT_ROOT="${@split_overlays(d, 1)}"
|
||||
|
||||
# Copy board device trees to root folder
|
||||
for DTB in $DT_ROOT; do
|
||||
DTB_BASE_NAME=`basename ${DTB} .dtb`
|
||||
|
||||
mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${DTB_BASE_NAME}.dtb ::${DTB_BASE_NAME}.dtb
|
||||
done
|
||||
|
||||
# Copy device tree overlays to dedicated folder
|
||||
mmd -i ${WORKDIR}/boot.img overlays
|
||||
for DTB in $DT_OVERLAYS; do
|
||||
DTB_EXT=${DTB##*.}
|
||||
DTB_BASE_NAME=`basename ${DTB} ."${DTB_EXT}"`
|
||||
|
||||
mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${DTB_BASE_NAME}.${DTB_EXT} ::overlays/${DTB_BASE_NAME}.${DTB_EXT}
|
||||
done
|
||||
fi
|
||||
case "${KERNEL_IMAGETYPE}" in
|
||||
"uImage")
|
||||
mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/u-boot.bin ::${SDIMG_KERNELIMAGE}
|
||||
mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}${KERNEL_INITRAMFS}-${MACHINE}.bin ::uImage
|
||||
mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/boot.scr ::boot.scr
|
||||
;;
|
||||
*)
|
||||
mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}${KERNEL_INITRAMFS}-${MACHINE}.bin ::${SDIMG_KERNELIMAGE}
|
||||
;;
|
||||
case "${RPI_GPU_FIRMWARE}" in
|
||||
"arm128" | "arm192" | "arm224" | "arm240")
|
||||
mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/bcm2835-bootfiles/${RPI_GPU_FIRMWARE}_start.elf ::start.elf
|
||||
;;
|
||||
*)
|
||||
bberror "RPI_GPU_FIRMWARE is undefined or value not recognised. Possible values: arm128, arm192, arm224 or arm240."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/bcm2835-bootfiles/config.txt ::
|
||||
mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/bcm2835-bootfiles/cmdline.txt ::
|
||||
mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/bcm2835-bootfiles/bootcode.bin ::
|
||||
mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/bcm2835-bootfiles/loader.bin ::
|
||||
mcopy -i ${WORKDIR}/boot.img -s ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}.bin ::kernel.img
|
||||
|
||||
if [ -n ${FATPAYLOAD} ] ; then
|
||||
echo "Copying payload into VFAT"
|
||||
for entry in ${FATPAYLOAD} ; do
|
||||
@@ -146,41 +104,18 @@ IMAGE_CMD_rpi-sdimg () {
|
||||
fi
|
||||
|
||||
# Add stamp file
|
||||
echo "${IMAGE_NAME}" > ${WORKDIR}/image-version-info
|
||||
mcopy -i ${WORKDIR}/boot.img -v ${WORKDIR}/image-version-info ::
|
||||
|
||||
# Deploy vfat partition (for u-boot case only)
|
||||
case "${KERNEL_IMAGETYPE}" in
|
||||
"uImage")
|
||||
cp ${WORKDIR}/boot.img ${IMGDEPLOYDIR}/${SDIMG_VFAT}
|
||||
ln -sf ${SDIMG_VFAT} ${SDIMG_LINK_VFAT}
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
echo "${IMAGE_NAME}-${IMAGEDATESTAMP}" > ${WORKDIR}/image-version-info
|
||||
mcopy -i ${WORKDIR}/boot.img -v ${WORKDIR}//image-version-info ::
|
||||
|
||||
# Burn Partitions
|
||||
dd if=${WORKDIR}/boot.img of=${SDIMG} conv=notrunc seek=1 bs=$(expr ${IMAGE_ROOTFS_ALIGNMENT} \* 1024) && sync && sync
|
||||
# If SDIMG_ROOTFS_TYPE is a .xz file use xzcat
|
||||
if echo "${SDIMG_ROOTFS_TYPE}" | egrep -q "*\.xz"
|
||||
if [[ "$SDIMG_ROOTFS_TYPE" == *.xz ]]
|
||||
then
|
||||
xzcat ${SDIMG_ROOTFS} | dd of=${SDIMG} conv=notrunc seek=1 bs=$(expr 1024 \* ${BOOT_SPACE_ALIGNED} + ${IMAGE_ROOTFS_ALIGNMENT} \* 1024) && sync && sync
|
||||
else
|
||||
dd if=${SDIMG_ROOTFS} of=${SDIMG} conv=notrunc seek=1 bs=$(expr 1024 \* ${BOOT_SPACE_ALIGNED} + ${IMAGE_ROOTFS_ALIGNMENT} \* 1024) && sync && sync
|
||||
fi
|
||||
|
||||
# Optionally apply compression
|
||||
case "${SDIMG_COMPRESSION}" in
|
||||
"gzip")
|
||||
gzip -k9 "${SDIMG}"
|
||||
;;
|
||||
"bzip2")
|
||||
bzip2 -k9 "${SDIMG}"
|
||||
;;
|
||||
"xz")
|
||||
xz -k "${SDIMG}"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
ROOTFS_POSTPROCESS_COMMAND += " rpi_generate_sysctl_config ; "
|
||||
|
||||
@@ -2,13 +2,9 @@
|
||||
BBPATH .= ":${LAYERDIR}"
|
||||
|
||||
# We have a recipes directory containing .bb and .bbappend files, add to BBFILES
|
||||
BBFILES += "${LAYERDIR}/recipes*/*/*.bb \
|
||||
BBFILES := "${BBFILES} ${LAYERDIR}/recipes*/*/*.bb \
|
||||
${LAYERDIR}/recipes*/*/*.bbappend"
|
||||
|
||||
BBFILE_COLLECTIONS += "raspberrypi"
|
||||
BBFILE_PATTERN_raspberrypi := "^${LAYERDIR}/"
|
||||
BBFILE_PRIORITY_raspberrypi = "9"
|
||||
|
||||
# Additional license directories.
|
||||
LICENSE_PATH += "${LAYERDIR}/files/custom-licenses"
|
||||
|
||||
BBFILE_PRIORITY_raspberrypi = "6"
|
||||
|
||||
@@ -1,97 +0,0 @@
|
||||
include conf/machine/include/rpi-default-settings.inc
|
||||
include conf/machine/include/rpi-default-versions.inc
|
||||
include conf/machine/include/rpi-default-providers.inc
|
||||
|
||||
SOC_FAMILY = "rpi"
|
||||
include conf/machine/include/soc-family.inc
|
||||
|
||||
IMAGE_FSTYPES ?= "tar.bz2 ext3 rpi-sdimg"
|
||||
|
||||
XSERVER = " \
|
||||
xserver-xorg \
|
||||
${@bb.utils.contains("MACHINE_FEATURES", "vc4graphics", "xserver-xorg-extension-glx", "", d)} \
|
||||
${@bb.utils.contains("MACHINE_FEATURES", "vc4graphics", "xf86-video-modesetting", "xf86-video-fbdev", d)} \
|
||||
"
|
||||
|
||||
KERNEL_DEVICETREE ?= " \
|
||||
bcm2708-rpi-0-w.dtb \
|
||||
bcm2708-rpi-b.dtb \
|
||||
bcm2708-rpi-b-plus.dtb \
|
||||
bcm2709-rpi-2-b.dtb \
|
||||
bcm2710-rpi-3-b.dtb \
|
||||
bcm2708-rpi-cm.dtb \
|
||||
bcm2710-rpi-cm3.dtb \
|
||||
\
|
||||
overlays/hifiberry-amp.dtbo \
|
||||
overlays/hifiberry-dac.dtbo \
|
||||
overlays/hifiberry-dacplus.dtbo \
|
||||
overlays/hifiberry-digi.dtbo \
|
||||
overlays/i2c-rtc.dtbo \
|
||||
overlays/iqaudio-dac.dtbo \
|
||||
overlays/iqaudio-dacplus.dtbo \
|
||||
overlays/lirc-rpi.dtbo \
|
||||
overlays/pitft22.dtbo \
|
||||
overlays/pitft28-resistive.dtbo \
|
||||
overlays/pitft35-resistive.dtbo \
|
||||
overlays/pps-gpio.dtbo \
|
||||
overlays/rpi-ft5406.dtbo \
|
||||
overlays/w1-gpio.dtbo \
|
||||
overlays/w1-gpio-pullup.dtbo \
|
||||
overlays/pi3-disable-bt.dtbo \
|
||||
overlays/pi3-miniuart-bt.dtbo \
|
||||
overlays/vc4-kms-v3d.dtbo \
|
||||
"
|
||||
KERNEL_IMAGETYPE ?= "Image"
|
||||
|
||||
MACHINE_FEATURES += "apm usbhost keyboard vfat ext2 screen touchscreen alsa bluetooth wifi sdio"
|
||||
|
||||
# Raspberry Pi has no hardware clock
|
||||
MACHINE_FEATURES_BACKFILL_CONSIDERED = "rtc"
|
||||
|
||||
MACHINE_EXTRA_RRECOMMENDS += " kernel-modules"
|
||||
|
||||
# Set Raspberrypi splash image
|
||||
SPLASH = "psplash-raspberrypi"
|
||||
|
||||
def make_dtb_boot_files(d):
|
||||
# Generate IMAGE_BOOT_FILES entries for device tree files listed in
|
||||
# KERNEL_DEVICETREE.
|
||||
alldtbs = d.getVar('KERNEL_DEVICETREE')
|
||||
imgtyp = d.getVar('KERNEL_IMAGETYPE')
|
||||
|
||||
def transform(dtb):
|
||||
if dtb.endswith('dtb'):
|
||||
# eg: whatever/bcm2708-rpi-b.dtb has:
|
||||
# DEPLOYDIR file: ${KERNEL_IMAGETYPE}-bcm2708-rpi-b.dtb
|
||||
# destination: bcm2708-rpi-b.dtb
|
||||
base = os.path.basename(dtb)
|
||||
src = '{}-{}'.format(imgtyp, base)
|
||||
dst = base
|
||||
return '{};{}'.format(src, dst)
|
||||
elif dtb.endswith('dtbo'):
|
||||
# overlay dtb:
|
||||
# eg: overlays/hifiberry-amp.dtbo has:
|
||||
# DEPLOYDIR file: ${KERNEL_IMAGETYPE}-hifiberry-amp.dtbo
|
||||
# destination: overlays/hifiberry-amp.dtbo
|
||||
base = os.path.basename(dtb)
|
||||
src = '{}-{}'.format(imgtyp, base)
|
||||
dst = dtb
|
||||
return '{};{}'.format(src, dtb)
|
||||
|
||||
return ' '.join([transform(dtb) for dtb in alldtbs.split(' ') if dtb])
|
||||
|
||||
|
||||
IMAGE_BOOT_FILES ?= "bcm2835-bootfiles/* \
|
||||
${@make_dtb_boot_files(d)} \
|
||||
${@bb.utils.contains('KERNEL_IMAGETYPE', 'uImage', \
|
||||
'${KERNEL_IMAGETYPE} u-boot.bin;${SDIMG_KERNELIMAGE} boot.scr', \
|
||||
'${KERNEL_IMAGETYPE};${SDIMG_KERNELIMAGE}', d)} \
|
||||
"
|
||||
do_image_wic[depends] += " \
|
||||
bcm2835-bootfiles:do_deploy \
|
||||
${@bb.utils.contains('RPI_USE_U_BOOT', '1', 'u-boot:do_deploy', '',d)} \
|
||||
"
|
||||
|
||||
# The kernel image is installed into the FAT32 boot partition and does not need
|
||||
# to also be installed into the rootfs.
|
||||
RDEPENDS_kernel-base = ""
|
||||
@@ -1,10 +1,7 @@
|
||||
# RaspberryPi BSP default providers
|
||||
|
||||
PREFERRED_PROVIDER_virtual/kernel ?= "linux-raspberrypi"
|
||||
PREFERRED_PROVIDER_virtual/xserver ?= "xserver-xorg"
|
||||
PREFERRED_PROVIDER_virtual/egl ?= "${@bb.utils.contains("MACHINE_FEATURES", "vc4graphics", "mesa", "userland", d)}"
|
||||
PREFERRED_PROVIDER_virtual/libgles2 ?= "${@bb.utils.contains("MACHINE_FEATURES", "vc4graphics", "mesa", "userland", d)}"
|
||||
PREFERRED_PROVIDER_virtual/libgl ?= "${@bb.utils.contains("MACHINE_FEATURES", "vc4graphics", "mesa", "mesa-gl", d)}"
|
||||
PREFERRED_PROVIDER_virtual/mesa ?= "${@bb.utils.contains("MACHINE_FEATURES", "vc4graphics", "mesa", "mesa-gl", d)}"
|
||||
PREFERRED_PROVIDER_libgbm ?= "${@bb.utils.contains("MACHINE_FEATURES", "vc4graphics", "mesa", "mesa-gl", d)}"
|
||||
PREFERRED_PROVIDER_jpeg ?= "jpeg"
|
||||
PREFERRED_PROVIDER_virtual/kernel = "linux-raspberrypi"
|
||||
PREFERRED_PROVIDER_virtual/xserver = "xserver-xorg"
|
||||
PREFERRED_PROVIDER_virtual/egl ?= "vc-graphics-hardfp"
|
||||
PREFERRED_PROVIDER_virtual/libgles2 ?= "vc-graphics-hardfp"
|
||||
PREFERRED_PROVIDER_virtual/libgl ?= "vc-graphics-hardfp"
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
# RaspberryPi BSP default versions
|
||||
|
||||
PREFERRED_VERSION_linux-raspberrypi ??= "4.9.%"
|
||||
PREFERRED_VERSION_udev = "164"
|
||||
|
||||
@@ -1,15 +1,10 @@
|
||||
DEFAULTTUNE ?= "armv6"
|
||||
DEFAULTTUNE ?= "arm1176jzfs"
|
||||
|
||||
require conf/machine/include/arm/arch-armv6.inc
|
||||
|
||||
TUNEVALID[arm1176jzfs] = "Enable arm1176jzfs specific processor optimizations"
|
||||
TUNE_CCARGS += "${@bb.utils.contains("TUNE_FEATURES", "arm1176jzfs", "-mtune=arm1176jzf-s", "", d)}"
|
||||
TUNE_CCARGS += "${@bb.utils.contains("TUNE_FEATURES", "vfp", "-mfpu=vfp", "", d)}"
|
||||
|
||||
AVAILTUNES += "arm1176jzfs arm1176jzfshf"
|
||||
ARMPKGARCH_tune-arm1176jzfs = "arm1176jzfs"
|
||||
ARMPKGARCH_tune-arm1176jzfshf = "arm1176jzfs"
|
||||
AVAILTUNES += "arm1176jzfs"
|
||||
TUNE_FEATURES_tune-arm1176jzfs = "${TUNE_FEATURES_tune-armv6} arm1176jzfs"
|
||||
TUNE_FEATURES_tune-arm1176jzfshf = "${TUNE_FEATURES_tune-arm1176jzfs} callconvention-hard"
|
||||
PACKAGE_EXTRA_ARCHS_tune-arm1176jzfs = "${PACKAGE_EXTRA_ARCHS_tune-armv6}"
|
||||
PACKAGE_EXTRA_ARCHS_tune-arm1176jzfshf = "${PACKAGE_EXTRA_ARCHS_tune-armv6hf} arm1176jzfshf-vfp"
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
#@TYPE: Machine
|
||||
#@NAME: RaspberryPi Compute Module (CM1)
|
||||
#@DESCRIPTION: Machine configuration for the RaspberryPi Compute Module (CM1)
|
||||
|
||||
MACHINEOVERRIDES = "raspberrypi:${MACHINE}"
|
||||
include conf/machine/raspberrypi.conf
|
||||
@@ -1,6 +0,0 @@
|
||||
#@TYPE: Machine
|
||||
#@NAME: RaspberryPi Compute Module 3 (CM3)
|
||||
#@DESCRIPTION: Machine configuration for the RaspberryPi Compute Module 3 (CM3)
|
||||
|
||||
MACHINEOVERRIDES = "raspberrypi2:${MACHINE}"
|
||||
include conf/machine/raspberrypi2.conf
|
||||
@@ -1,13 +1,37 @@
|
||||
#@TYPE: Machine
|
||||
#@NAME: RaspberryPi Development Board
|
||||
#@DESCRIPTION: Machine configuration for the RaspberryPi http://www.raspberrypi.org/ Board
|
||||
#@MAINTAINER: John Willis
|
||||
|
||||
DEFAULTTUNE ?= "arm1176jzfshf"
|
||||
|
||||
include conf/machine/include/rpi-default-settings.inc
|
||||
include conf/machine/include/rpi-default-versions.inc
|
||||
include conf/machine/include/rpi-default-providers.inc
|
||||
require conf/machine/include/tune-arm1176jzf-s.inc
|
||||
include conf/machine/include/rpi-base.inc
|
||||
|
||||
SERIAL_CONSOLE ?= "115200 ttyAMA0"
|
||||
IMAGE_FSTYPES ?= "tar.bz2 ext3 rpi-sdimg"
|
||||
|
||||
UBOOT_MACHINE = "rpi_config"
|
||||
VC4_CMA_SIZE_raspberrypi ?= "cma-64"
|
||||
SERIAL_CONSOLE = "115200 ttyAMA0"
|
||||
|
||||
MACHINE_KERNEL_PR = "r4"
|
||||
|
||||
XSERVER = " \
|
||||
xserver-xorg \
|
||||
xf86-input-evdev \
|
||||
xf86-input-mouse \
|
||||
xf86-input-keyboard \
|
||||
xf86-video-fbdev \
|
||||
"
|
||||
|
||||
KERNEL_IMAGETYPE = "Image"
|
||||
|
||||
MACHINE_FEATURES = "kernel26 apm usbgadget usbhost keyboard vfat ext2 screen touchscreen alsa bluetooth wifi sdio"
|
||||
|
||||
#RaspberryPi has no hardware clock
|
||||
MACHINE_FEATURES_BACKFILL_CONSIDERED = "rtc"
|
||||
|
||||
MACHINE_EXTRA_RRECOMMENDS += " \
|
||||
kernel-modules \
|
||||
"
|
||||
|
||||
# Set default GPU firmware image to be shipped
|
||||
RPI_GPU_FIRMWARE ?= "arm192"
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
#@TYPE: Machine
|
||||
#@NAME: RaspberryPi Zero WiFi Development Board
|
||||
#@DESCRIPTION: Machine configuration for the RaspberryPi Zero WiFi board (https://www.raspberrypi.org/blog/raspberry-pi-zero-w-joins-family/)
|
||||
|
||||
DEFAULTTUNE ?= "arm1176jzfshf"
|
||||
require conf/machine/include/tune-arm1176jzf-s.inc
|
||||
include conf/machine/include/rpi-base.inc
|
||||
|
||||
MACHINE_EXTRA_RRECOMMENDS += "linux-firmware-bcm43430"
|
||||
|
||||
SDIMG_KERNELIMAGE ?= "kernel.img"
|
||||
KERNEL_DEFCONFIG ?= "bcmrpi_defconfig"
|
||||
UBOOT_MACHINE ?= "rpi_config"
|
||||
SERIAL_CONSOLE ?= "115200 ttyS0"
|
||||
VC4_CMA_SIZE ?= "cma-128"
|
||||
@@ -1,9 +0,0 @@
|
||||
#@TYPE: Machine
|
||||
#@NAME: RaspberryPi Zero Development Board
|
||||
#@DESCRIPTION: Machine configuration for the RaspberryPi Zero board (https://www.raspberrypi.org/blog/raspberry-pi-zero)
|
||||
|
||||
MACHINEOVERRIDES = "raspberrypi:${MACHINE}"
|
||||
include conf/machine/raspberrypi.conf
|
||||
|
||||
SERIAL_CONSOLE ?= "115200 ttyAMA0"
|
||||
VC4_CMA_SIZE ?= "cma-128"
|
||||
@@ -1,13 +0,0 @@
|
||||
#@TYPE: Machine
|
||||
#@NAME: RaspberryPi 2 Development Board
|
||||
#@DESCRIPTION: Machine configuration for the RaspberryPi 2
|
||||
|
||||
DEFAULTTUNE ?= "cortexa7thf-neon-vfpv4"
|
||||
|
||||
require conf/machine/include/tune-cortexa7.inc
|
||||
include conf/machine/include/rpi-base.inc
|
||||
|
||||
SERIAL_CONSOLE ?= "115200 ttyAMA0"
|
||||
|
||||
UBOOT_MACHINE = "rpi_2_config"
|
||||
VC4_CMA_SIZE ?= "cma-256"
|
||||
@@ -1,40 +0,0 @@
|
||||
#@TYPE: Machine
|
||||
#@NAME: RaspberryPi 3 Development Board
|
||||
#@DESCRIPTION: Machine configuration for the RaspberryPi 3 in 64 bits mode
|
||||
|
||||
MACHINEOVERRIDES = "raspberrypi3:${MACHINE}"
|
||||
|
||||
MACHINE_EXTRA_RRECOMMENDS += "linux-firmware-bcm43430"
|
||||
|
||||
require conf/machine/include/arm/arch-armv8.inc
|
||||
include conf/machine/include/rpi-base.inc
|
||||
|
||||
KERNEL_DEVICETREE = " \
|
||||
broadcom/bcm2710-rpi-3-b.dtb \
|
||||
broadcom/bcm2837-rpi-3-b.dtb \
|
||||
\
|
||||
overlays/hifiberry-amp.dtbo \
|
||||
overlays/hifiberry-dac.dtbo \
|
||||
overlays/hifiberry-dacplus.dtbo \
|
||||
overlays/hifiberry-digi.dtbo \
|
||||
overlays/i2c-rtc.dtbo \
|
||||
overlays/iqaudio-dac.dtbo \
|
||||
overlays/iqaudio-dacplus.dtbo \
|
||||
overlays/lirc-rpi.dtbo \
|
||||
overlays/pitft22.dtbo \
|
||||
overlays/pitft28-resistive.dtbo \
|
||||
overlays/pitft35-resistive.dtbo \
|
||||
overlays/pps-gpio.dtbo \
|
||||
overlays/rpi-ft5406.dtbo \
|
||||
overlays/w1-gpio.dtbo \
|
||||
overlays/w1-gpio-pullup.dtbo \
|
||||
overlays/pi3-disable-bt.dtbo \
|
||||
overlays/pi3-miniuart-bt.dtbo \
|
||||
overlays/vc4-kms-v3d.dtbo \
|
||||
"
|
||||
|
||||
SERIAL_CONSOLE ?= "115200 ttyS0"
|
||||
VC4_CMA_SIZE ?= "cma-256"
|
||||
|
||||
UBOOT_MACHINE = "rpi_3_config"
|
||||
MACHINE_FEATURES_append = " vc4graphics"
|
||||
@@ -1,15 +0,0 @@
|
||||
#@TYPE: Machine
|
||||
#@NAME: RaspberryPi 3 Development Board
|
||||
#@DESCRIPTION: Machine configuration for the RaspberryPi 3
|
||||
|
||||
DEFAULTTUNE ?= "cortexa7thf-neon-vfpv4"
|
||||
require conf/machine/include/tune-cortexa7.inc
|
||||
include conf/machine/include/rpi-base.inc
|
||||
|
||||
MACHINE_EXTRA_RRECOMMENDS += "linux-firmware-bcm43430"
|
||||
|
||||
SDIMG_KERNELIMAGE ?= "kernel7.img"
|
||||
KERNEL_DEFCONFIG ?= "bcm2709_defconfig"
|
||||
UBOOT_MACHINE = "rpi_3_32b_config"
|
||||
SERIAL_CONSOLE ?= "115200 ttyS0"
|
||||
VC4_CMA_SIZE ?= "cma-256"
|
||||
225
docs/Makefile
225
docs/Makefile
@@ -1,225 +0,0 @@
|
||||
# Makefile for Sphinx documentation
|
||||
#
|
||||
|
||||
# You can set these variables from the command line.
|
||||
SPHINXOPTS =
|
||||
SPHINXBUILD = sphinx-build
|
||||
PAPER =
|
||||
BUILDDIR = _build
|
||||
|
||||
# Internal variables.
|
||||
PAPEROPT_a4 = -D latex_paper_size=a4
|
||||
PAPEROPT_letter = -D latex_paper_size=letter
|
||||
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
||||
# the i18n builder cannot share the environment and doctrees with the others
|
||||
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
||||
|
||||
.PHONY: help
|
||||
help:
|
||||
@echo "Please use \`make <target>' where <target> is one of"
|
||||
@echo " html to make standalone HTML files"
|
||||
@echo " dirhtml to make HTML files named index.html in directories"
|
||||
@echo " singlehtml to make a single large HTML file"
|
||||
@echo " pickle to make pickle files"
|
||||
@echo " json to make JSON files"
|
||||
@echo " htmlhelp to make HTML files and a HTML help project"
|
||||
@echo " qthelp to make HTML files and a qthelp project"
|
||||
@echo " applehelp to make an Apple Help Book"
|
||||
@echo " devhelp to make HTML files and a Devhelp project"
|
||||
@echo " epub to make an epub"
|
||||
@echo " epub3 to make an epub3"
|
||||
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
|
||||
@echo " latexpdf to make LaTeX files and run them through pdflatex"
|
||||
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
|
||||
@echo " text to make text files"
|
||||
@echo " man to make manual pages"
|
||||
@echo " texinfo to make Texinfo files"
|
||||
@echo " info to make Texinfo files and run them through makeinfo"
|
||||
@echo " gettext to make PO message catalogs"
|
||||
@echo " changes to make an overview of all changed/added/deprecated items"
|
||||
@echo " xml to make Docutils-native XML files"
|
||||
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
|
||||
@echo " linkcheck to check all external links for integrity"
|
||||
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
|
||||
@echo " coverage to run coverage check of the documentation (if enabled)"
|
||||
@echo " dummy to check syntax errors of document sources"
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm -rf $(BUILDDIR)/*
|
||||
|
||||
.PHONY: html
|
||||
html:
|
||||
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
|
||||
@echo
|
||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
|
||||
|
||||
.PHONY: dirhtml
|
||||
dirhtml:
|
||||
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
|
||||
@echo
|
||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
|
||||
|
||||
.PHONY: singlehtml
|
||||
singlehtml:
|
||||
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
|
||||
@echo
|
||||
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
|
||||
|
||||
.PHONY: pickle
|
||||
pickle:
|
||||
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
|
||||
@echo
|
||||
@echo "Build finished; now you can process the pickle files."
|
||||
|
||||
.PHONY: json
|
||||
json:
|
||||
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
|
||||
@echo
|
||||
@echo "Build finished; now you can process the JSON files."
|
||||
|
||||
.PHONY: htmlhelp
|
||||
htmlhelp:
|
||||
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
|
||||
@echo
|
||||
@echo "Build finished; now you can run HTML Help Workshop with the" \
|
||||
".hhp project file in $(BUILDDIR)/htmlhelp."
|
||||
|
||||
.PHONY: qthelp
|
||||
qthelp:
|
||||
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
|
||||
@echo
|
||||
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
|
||||
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
|
||||
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/meta-raspberrypi.qhcp"
|
||||
@echo "To view the help file:"
|
||||
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/meta-raspberrypi.qhc"
|
||||
|
||||
.PHONY: applehelp
|
||||
applehelp:
|
||||
$(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp
|
||||
@echo
|
||||
@echo "Build finished. The help book is in $(BUILDDIR)/applehelp."
|
||||
@echo "N.B. You won't be able to view it unless you put it in" \
|
||||
"~/Library/Documentation/Help or install it in your application" \
|
||||
"bundle."
|
||||
|
||||
.PHONY: devhelp
|
||||
devhelp:
|
||||
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
|
||||
@echo
|
||||
@echo "Build finished."
|
||||
@echo "To view the help file:"
|
||||
@echo "# mkdir -p $$HOME/.local/share/devhelp/meta-raspberrypi"
|
||||
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/meta-raspberrypi"
|
||||
@echo "# devhelp"
|
||||
|
||||
.PHONY: epub
|
||||
epub:
|
||||
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
|
||||
@echo
|
||||
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
|
||||
|
||||
.PHONY: epub3
|
||||
epub3:
|
||||
$(SPHINXBUILD) -b epub3 $(ALLSPHINXOPTS) $(BUILDDIR)/epub3
|
||||
@echo
|
||||
@echo "Build finished. The epub3 file is in $(BUILDDIR)/epub3."
|
||||
|
||||
.PHONY: latex
|
||||
latex:
|
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo
|
||||
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
|
||||
@echo "Run \`make' in that directory to run these through (pdf)latex" \
|
||||
"(use \`make latexpdf' here to do that automatically)."
|
||||
|
||||
.PHONY: latexpdf
|
||||
latexpdf:
|
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo "Running LaTeX files through pdflatex..."
|
||||
$(MAKE) -C $(BUILDDIR)/latex all-pdf
|
||||
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
||||
|
||||
.PHONY: latexpdfja
|
||||
latexpdfja:
|
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo "Running LaTeX files through platex and dvipdfmx..."
|
||||
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
|
||||
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
||||
|
||||
.PHONY: text
|
||||
text:
|
||||
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
|
||||
@echo
|
||||
@echo "Build finished. The text files are in $(BUILDDIR)/text."
|
||||
|
||||
.PHONY: man
|
||||
man:
|
||||
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
|
||||
@echo
|
||||
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
|
||||
|
||||
.PHONY: texinfo
|
||||
texinfo:
|
||||
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
||||
@echo
|
||||
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
|
||||
@echo "Run \`make' in that directory to run these through makeinfo" \
|
||||
"(use \`make info' here to do that automatically)."
|
||||
|
||||
.PHONY: info
|
||||
info:
|
||||
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
||||
@echo "Running Texinfo files through makeinfo..."
|
||||
make -C $(BUILDDIR)/texinfo info
|
||||
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
|
||||
|
||||
.PHONY: gettext
|
||||
gettext:
|
||||
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
|
||||
@echo
|
||||
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
|
||||
|
||||
.PHONY: changes
|
||||
changes:
|
||||
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
|
||||
@echo
|
||||
@echo "The overview file is in $(BUILDDIR)/changes."
|
||||
|
||||
.PHONY: linkcheck
|
||||
linkcheck:
|
||||
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
|
||||
@echo
|
||||
@echo "Link check complete; look for any errors in the above output " \
|
||||
"or in $(BUILDDIR)/linkcheck/output.txt."
|
||||
|
||||
.PHONY: doctest
|
||||
doctest:
|
||||
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
|
||||
@echo "Testing of doctests in the sources finished, look at the " \
|
||||
"results in $(BUILDDIR)/doctest/output.txt."
|
||||
|
||||
.PHONY: coverage
|
||||
coverage:
|
||||
$(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage
|
||||
@echo "Testing of coverage in the sources finished, look at the " \
|
||||
"results in $(BUILDDIR)/coverage/python.txt."
|
||||
|
||||
.PHONY: xml
|
||||
xml:
|
||||
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
|
||||
@echo
|
||||
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
|
||||
|
||||
.PHONY: pseudoxml
|
||||
pseudoxml:
|
||||
$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
|
||||
@echo
|
||||
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
|
||||
|
||||
.PHONY: dummy
|
||||
dummy:
|
||||
$(SPHINXBUILD) -b dummy $(ALLSPHINXOPTS) $(BUILDDIR)/dummy
|
||||
@echo
|
||||
@echo "Build finished. Dummy builder generates no files."
|
||||
343
docs/conf.py
343
docs/conf.py
@@ -1,343 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# meta-raspberrypi documentation build configuration file, created by
|
||||
# sphinx-quickstart on Tue May 23 09:51:24 2017.
|
||||
#
|
||||
# This file is execfile()d with the current directory set to its
|
||||
# containing dir.
|
||||
#
|
||||
# Note that not all possible configuration values are present in this
|
||||
# autogenerated file.
|
||||
#
|
||||
# All configuration values have a default; values that are commented out
|
||||
# serve to show the default.
|
||||
|
||||
# If extensions (or modules to document with autodoc) are in another directory,
|
||||
# add these directories to sys.path here. If the directory is relative to the
|
||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||
#
|
||||
# import os
|
||||
# import sys
|
||||
# sys.path.insert(0, os.path.abspath('.'))
|
||||
|
||||
# -- General configuration ------------------------------------------------
|
||||
|
||||
# If your documentation needs a minimal Sphinx version, state it here.
|
||||
#
|
||||
# needs_sphinx = '1.0'
|
||||
|
||||
# Add any Sphinx extension module names here, as strings. They can be
|
||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||
# ones.
|
||||
extensions = []
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ['_templates']
|
||||
|
||||
# The suffix(es) of source filenames.
|
||||
# You can specify multiple suffix as a list of string:
|
||||
#
|
||||
# source_suffix = ['.rst', '.md']
|
||||
source_suffix = ['.rst', '.md']
|
||||
|
||||
# The encoding of source files.
|
||||
#
|
||||
# source_encoding = 'utf-8-sig'
|
||||
|
||||
# The master toctree document.
|
||||
master_doc = 'index'
|
||||
|
||||
# General information about the project.
|
||||
project = 'meta-raspberrypi'
|
||||
copyright = '2017, meta-raspberrypi contributors'
|
||||
author = 'meta-raspberrypi contributors'
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
# |version| and |release|, also used in various other places throughout the
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = 'pyro'
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = 'pyro'
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
#
|
||||
# This is also used if you do content translation via gettext catalogs.
|
||||
# Usually you set "language" from the command line for these cases.
|
||||
language = None
|
||||
|
||||
# There are two options for replacing |today|: either, you set today to some
|
||||
# non-false value, then it is used:
|
||||
#
|
||||
# today = ''
|
||||
#
|
||||
# Else, today_fmt is used as the format for a strftime call.
|
||||
#
|
||||
# today_fmt = '%B %d, %Y'
|
||||
|
||||
# List of patterns, relative to source directory, that match files and
|
||||
# directories to ignore when looking for source files.
|
||||
# This patterns also effect to html_static_path and html_extra_path
|
||||
exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
|
||||
|
||||
# The reST default role (used for this markup: `text`) to use for all
|
||||
# documents.
|
||||
#
|
||||
# default_role = None
|
||||
|
||||
# If true, '()' will be appended to :func: etc. cross-reference text.
|
||||
#
|
||||
# add_function_parentheses = True
|
||||
|
||||
# If true, the current module name will be prepended to all description
|
||||
# unit titles (such as .. function::).
|
||||
#
|
||||
# add_module_names = True
|
||||
|
||||
# If true, sectionauthor and moduleauthor directives will be shown in the
|
||||
# output. They are ignored by default.
|
||||
#
|
||||
# show_authors = False
|
||||
|
||||
# The name of the Pygments (syntax highlighting) style to use.
|
||||
pygments_style = 'sphinx'
|
||||
|
||||
# A list of ignored prefixes for module index sorting.
|
||||
# modindex_common_prefix = []
|
||||
|
||||
# If true, keep warnings as "system message" paragraphs in the built documents.
|
||||
# keep_warnings = False
|
||||
|
||||
# If true, `todo` and `todoList` produce output, else they produce nothing.
|
||||
todo_include_todos = False
|
||||
|
||||
|
||||
# -- Options for HTML output ----------------------------------------------
|
||||
|
||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||
# a list of builtin themes.
|
||||
#
|
||||
html_theme = 'alabaster'
|
||||
|
||||
# Theme options are theme-specific and customize the look and feel of a theme
|
||||
# further. For a list of options available for each theme, see the
|
||||
# documentation.
|
||||
#
|
||||
# html_theme_options = {}
|
||||
|
||||
# Add any paths that contain custom themes here, relative to this directory.
|
||||
# html_theme_path = []
|
||||
|
||||
# The name for this set of Sphinx documents.
|
||||
# "<project> v<release> documentation" by default.
|
||||
#
|
||||
# html_title = 'meta-raspberrypi vmaster'
|
||||
|
||||
# A shorter title for the navigation bar. Default is the same as html_title.
|
||||
#
|
||||
# html_short_title = None
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top
|
||||
# of the sidebar.
|
||||
#
|
||||
# html_logo = None
|
||||
|
||||
# The name of an image file (relative to this directory) to use as a favicon of
|
||||
# the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
||||
# pixels large.
|
||||
#
|
||||
# html_favicon = None
|
||||
|
||||
# Add any paths that contain custom static files (such as style sheets) here,
|
||||
# relative to this directory. They are copied after the builtin static files,
|
||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||
html_static_path = ['_static']
|
||||
|
||||
# Add any extra paths that contain custom files (such as robots.txt or
|
||||
# .htaccess) here, relative to this directory. These files are copied
|
||||
# directly to the root of the documentation.
|
||||
#
|
||||
# html_extra_path = []
|
||||
|
||||
# If not None, a 'Last updated on:' timestamp is inserted at every page
|
||||
# bottom, using the given strftime format.
|
||||
# The empty string is equivalent to '%b %d, %Y'.
|
||||
#
|
||||
# html_last_updated_fmt = None
|
||||
|
||||
# If true, SmartyPants will be used to convert quotes and dashes to
|
||||
# typographically correct entities.
|
||||
#
|
||||
# html_use_smartypants = True
|
||||
|
||||
# Custom sidebar templates, maps document names to template names.
|
||||
#
|
||||
# html_sidebars = {}
|
||||
|
||||
# Additional templates that should be rendered to pages, maps page names to
|
||||
# template names.
|
||||
#
|
||||
# html_additional_pages = {}
|
||||
|
||||
# If false, no module index is generated.
|
||||
#
|
||||
# html_domain_indices = True
|
||||
|
||||
# If false, no index is generated.
|
||||
#
|
||||
# html_use_index = True
|
||||
|
||||
# If true, the index is split into individual pages for each letter.
|
||||
#
|
||||
# html_split_index = False
|
||||
|
||||
# If true, links to the reST sources are added to the pages.
|
||||
#
|
||||
# html_show_sourcelink = True
|
||||
|
||||
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
|
||||
#
|
||||
# html_show_sphinx = True
|
||||
|
||||
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
|
||||
#
|
||||
# html_show_copyright = True
|
||||
|
||||
# If true, an OpenSearch description file will be output, and all pages will
|
||||
# contain a <link> tag referring to it. The value of this option must be the
|
||||
# base URL from which the finished HTML is served.
|
||||
#
|
||||
# html_use_opensearch = ''
|
||||
|
||||
# This is the file name suffix for HTML files (e.g. ".xhtml").
|
||||
# html_file_suffix = None
|
||||
|
||||
# Language to be used for generating the HTML full-text search index.
|
||||
# Sphinx supports the following languages:
|
||||
# 'da', 'de', 'en', 'es', 'fi', 'fr', 'h', 'it', 'ja'
|
||||
# 'nl', 'no', 'pt', 'ro', 'r', 'sv', 'tr', 'zh'
|
||||
#
|
||||
# html_search_language = 'en'
|
||||
|
||||
# A dictionary with options for the search language support, empty by default.
|
||||
# 'ja' uses this config value.
|
||||
# 'zh' user can custom change `jieba` dictionary path.
|
||||
#
|
||||
# html_search_options = {'type': 'default'}
|
||||
|
||||
# The name of a javascript file (relative to the configuration directory) that
|
||||
# implements a search results scorer. If empty, the default will be used.
|
||||
#
|
||||
# html_search_scorer = 'scorer.js'
|
||||
|
||||
# Output file base name for HTML help builder.
|
||||
htmlhelp_basename = 'meta-raspberrypidoc'
|
||||
|
||||
# -- Options for LaTeX output ---------------------------------------------
|
||||
|
||||
latex_elements = {
|
||||
# The paper size ('letterpaper' or 'a4paper').
|
||||
#
|
||||
# 'papersize': 'letterpaper',
|
||||
|
||||
# The font size ('10pt', '11pt' or '12pt').
|
||||
#
|
||||
# 'pointsize': '10pt',
|
||||
|
||||
# Additional stuff for the LaTeX preamble.
|
||||
#
|
||||
# 'preamble': '',
|
||||
|
||||
# Latex figure (float) alignment
|
||||
#
|
||||
# 'figure_align': 'htbp',
|
||||
}
|
||||
|
||||
# Grouping the document tree into LaTeX files. List of tuples
|
||||
# (source start file, target name, title,
|
||||
# author, documentclass [howto, manual, or own class]).
|
||||
latex_documents = [
|
||||
(master_doc, 'meta-raspberrypi.tex', 'meta-raspberrypi Documentation',
|
||||
'meta-raspberrypi contributors', 'manual'),
|
||||
]
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top of
|
||||
# the title page.
|
||||
#
|
||||
# latex_logo = None
|
||||
|
||||
# For "manual" documents, if this is true, then toplevel headings are parts,
|
||||
# not chapters.
|
||||
#
|
||||
# latex_use_parts = False
|
||||
|
||||
# If true, show page references after internal links.
|
||||
#
|
||||
# latex_show_pagerefs = False
|
||||
|
||||
# If true, show URL addresses after external links.
|
||||
#
|
||||
# latex_show_urls = False
|
||||
|
||||
# Documents to append as an appendix to all manuals.
|
||||
#
|
||||
# latex_appendices = []
|
||||
|
||||
# It false, will not define \strong, \code, itleref, \crossref ... but only
|
||||
# \sphinxstrong, ..., \sphinxtitleref, ... To help avoid clash with user added
|
||||
# packages.
|
||||
#
|
||||
# latex_keep_old_macro_names = True
|
||||
|
||||
# If false, no module index is generated.
|
||||
#
|
||||
# latex_domain_indices = True
|
||||
|
||||
|
||||
# -- Options for manual page output ---------------------------------------
|
||||
|
||||
# One entry per manual page. List of tuples
|
||||
# (source start file, name, description, authors, manual section).
|
||||
man_pages = [
|
||||
(master_doc, 'meta-raspberrypi', 'meta-raspberrypi Documentation',
|
||||
[author], 1)
|
||||
]
|
||||
|
||||
# If true, show URL addresses after external links.
|
||||
#
|
||||
# man_show_urls = False
|
||||
|
||||
|
||||
# -- Options for Texinfo output -------------------------------------------
|
||||
|
||||
# Grouping the document tree into Texinfo files. List of tuples
|
||||
# (source start file, target name, title, author,
|
||||
# dir menu entry, description, category)
|
||||
texinfo_documents = [
|
||||
(master_doc, 'meta-raspberrypi', 'meta-raspberrypi Documentation',
|
||||
author, 'meta-raspberrypi', 'One line description of project.',
|
||||
'Miscellaneous'),
|
||||
]
|
||||
|
||||
# Documents to append as an appendix to all manuals.
|
||||
#
|
||||
# texinfo_appendices = []
|
||||
|
||||
# If false, no module index is generated.
|
||||
#
|
||||
# texinfo_domain_indices = True
|
||||
|
||||
# How to display URL addresses: 'footnote', 'no', or 'inline'.
|
||||
#
|
||||
# texinfo_show_urls = 'footnote'
|
||||
|
||||
# If true, do not generate a @detailmenu in the "Top" node's menu.
|
||||
#
|
||||
# texinfo_no_detailmenu = False
|
||||
|
||||
source_parsers = {
|
||||
'.md': 'recommonmark.parser.CommonMarkParser',
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
# Contributing
|
||||
|
||||
## Mailing list
|
||||
|
||||
The main communication tool we use is a mailing list:
|
||||
* <yocto@yoctoproject.org>
|
||||
* <https://lists.yoctoproject.org/listinfo/yocto>
|
||||
|
||||
Feel free to ask any kind of questions but always prepend your email subject
|
||||
with "[meta-raspberrypi]". This is because we use the 'yocto' mailing list and
|
||||
not a perticular 'meta-raspberrypi' mailing list.
|
||||
|
||||
## Patches and pull requests
|
||||
|
||||
All the contributions should be compliant with the openembedded patch
|
||||
guidelines: <http://www.openembedded.org/wiki/Commit_Patch_Message_Guidelines>
|
||||
|
||||
To contribute to this project you should send pull requests to the github mirror
|
||||
(<https://github.com/agherzan/meta-raspberrypi>). **Additionally** you can send
|
||||
the patches for review to the above specified mailing list.
|
||||
|
||||
When creating patches for the mailing list, please use something like:
|
||||
|
||||
git format-patch -s --subject-prefix='meta-raspberrypi][PATCH' origin
|
||||
|
||||
When sending patches to the mailing list, please use something like:
|
||||
|
||||
git send-email --to yocto@yoctoproject.org <generated patch>
|
||||
|
||||
## Github issues
|
||||
|
||||
In order to manage and trace the meta-raspberrypi issues, we use github issues:
|
||||
<https://github.com/agherzan/meta-raspberrypi/issues>
|
||||
|
||||
If you push patches which have a github issue associated, please provide the
|
||||
issue number in the commit log just before "Signed-off-by" line(s). Example line
|
||||
for a bug:
|
||||
`[Issue #13]`
|
||||
@@ -1,9 +0,0 @@
|
||||
# Extra apps
|
||||
|
||||
## omxplayer
|
||||
|
||||
omxplayer depends on libav which has a commercial license. So in order to be
|
||||
able to compile omxplayer you will need to whiteflag the commercial
|
||||
license in your local.conf:
|
||||
|
||||
LICENSE_FLAGS_WHITELIST = "commercial"
|
||||
@@ -1,180 +0,0 @@
|
||||
# Optional build configuration
|
||||
|
||||
There are a set of ways in which a user can influence different paramenters of
|
||||
the build. We list here the ones that are closely related to this BSP or
|
||||
specific to it. For the rest please check:
|
||||
<http://www.yoctoproject.org/docs/latest/ref-manual/ref-manual.html>
|
||||
|
||||
## Compressed deployed files
|
||||
|
||||
1. Overwrite IMAGE_FSTYPES in local.conf
|
||||
* `IMAGE_FSTYPES = "tar.bz2 ext3.xz"`
|
||||
|
||||
2. Overwrite SDIMG_ROOTFS_TYPE in local.conf
|
||||
* `SDIMG_ROOTFS_TYPE = "ext3.xz"`
|
||||
|
||||
3. Overwrite SDIMG_COMPRESSION in local.conf
|
||||
* `SDIMG_COMPRESSION = "xz"`
|
||||
|
||||
Accommodate the values above to your own needs (ex: ext3 / ext4).
|
||||
|
||||
## GPU memory
|
||||
|
||||
* `GPU_MEM`: GPU memory in megabyte. Sets the memory split between the ARM and
|
||||
GPU. ARM gets the remaining memory. Min 16. Default 64.
|
||||
|
||||
* `GPU_MEM_256`: GPU memory in megabyte for the 256MB Raspberry Pi. Ignored by
|
||||
the 512MB RP. Overrides gpu_mem. Max 192. Default not set.
|
||||
|
||||
* `GPU_MEM_512`: GPU memory in megabyte for the 512MB Raspberry Pi. Ignored by
|
||||
the 256MB RP. Overrides gpu_mem. Max 448. Default not set.
|
||||
|
||||
* `GPU_MEM_1024`: GPU memory in megabyte for the 1024MB Raspberry Pi. Ignored by
|
||||
the 256MB/512MB RP. Overrides gpu_mem. Max 944. Default not set.
|
||||
|
||||
## Add purchased license codecs
|
||||
|
||||
To add you own licenses use variables `KEY_DECODE_MPG2` and `KEY_DECODE_WVC1` in
|
||||
local.conf. Example:
|
||||
|
||||
KEY_DECODE_MPG2 = "12345678"
|
||||
KEY_DECODE_WVC1 = "12345678"
|
||||
|
||||
You can supply more licenses separated by comma. Example:
|
||||
|
||||
KEY_DECODE_WVC1 = "0x12345678,0xabcdabcd,0x87654321"
|
||||
|
||||
|
||||
## Disable overscan
|
||||
|
||||
By default the GPU adds a black border around the video output to compensate for
|
||||
TVs which cut off part of the image. To disable this set this variable in
|
||||
local.conf:
|
||||
|
||||
DISABLE_OVERSCAN = "1"
|
||||
|
||||
## Set overclocking options
|
||||
|
||||
The Raspberry PI can be overclocked. As of now overclocking up to the "Turbo
|
||||
Mode" is officially supported by the raspbery and does not void warranty. Check
|
||||
the config.txt for a detailed description of options and modes. Example turbo
|
||||
mode:
|
||||
|
||||
ARM_FREQ = "1000"
|
||||
CORE_FREQ = "500"
|
||||
SDRAM_FREQ = "500"
|
||||
OVER_VOLTAGE = "6"
|
||||
|
||||
## Video camera support with V4L2 drivers
|
||||
|
||||
Set this variable to enable support for the video camera (Linux 3.12.4+
|
||||
required):
|
||||
|
||||
VIDEO_CAMERA = "1"
|
||||
|
||||
## Enable offline compositing support
|
||||
|
||||
Set this variable to enable support for dispmanx offline compositing:
|
||||
|
||||
DISPMANX_OFFLINE = "1"
|
||||
|
||||
This will enable the firmware to fall back to off-line compositing of Dispmanx
|
||||
elements. Normally the compositing is done on-line, during scanout, but cannot
|
||||
handle too many elements. With off-line enabled, an off-screen buffer is
|
||||
allocated for compositing. When scene complexity (number and sizes
|
||||
of elements) is high, compositing will happen off-line into the buffer.
|
||||
|
||||
Heavily recommended for Wayland/Weston.
|
||||
|
||||
See: <http://wayland.freedesktop.org/raspberrypi.html>
|
||||
|
||||
## Enable kgdb over console support
|
||||
|
||||
To add the kdbg over console (kgdboc) parameter to the kernel command line, set
|
||||
this variable in local.conf:
|
||||
|
||||
ENABLE_KGDB = "1"
|
||||
|
||||
## Boot to U-Boot
|
||||
|
||||
To have u-boot load kernel image, set in your local.conf:
|
||||
|
||||
KERNEL_IMAGETYPE = "uImage"
|
||||
|
||||
This will make kernel.img be u-boot image which will load uImage. By default,
|
||||
kernel.img is the actual kernel image (ex. Image).
|
||||
|
||||
## Image with Initramfs
|
||||
|
||||
To build an initramfs image:
|
||||
|
||||
* Set this 3 kernel variables (in linux-raspberrypi.inc for example)
|
||||
- kernel_configure_variable BLK_DEV_INITRD y
|
||||
- kernel_configure_variable INITRAMFS_SOURCE ""
|
||||
- kernel_configure_variable RD_GZIP y
|
||||
|
||||
* Set the yocto variables (in linux-raspberrypi.inc for example)
|
||||
- `INITRAMFS_IMAGE = "<a name for your initramfs image>"`
|
||||
- `INITRAMFS_IMAGE_BUNDLE = "1"`
|
||||
|
||||
* Set the meta-rasberrypi variable (in raspberrypi.conf for example)
|
||||
- `KERNEL_INITRAMFS = "-initramfs"`
|
||||
|
||||
## Enable SPI bus
|
||||
|
||||
When using device tree kernels, set this variable to enable the SPI bus:
|
||||
|
||||
ENABLE_SPI_BUS = "1"
|
||||
|
||||
## Enable I2C
|
||||
|
||||
When using device tree kernels, set this variable to enable I2C:
|
||||
|
||||
ENABLE_I2C = "1"
|
||||
|
||||
## Enable PiTFT support
|
||||
|
||||
Basic support for using PiTFT screens can be enabled by adding below in
|
||||
local.conf:
|
||||
|
||||
* `MACHINE_FEATURES += "pitft"`
|
||||
- This will enable SPI bus and i2c device-trees, it will also setup
|
||||
framebuffer for console and x server on PiTFT.
|
||||
|
||||
NOTE: To get this working the overlay for the PiTFT model must be build, added
|
||||
and specified as well (dtoverlay=<driver> in config.txt).
|
||||
|
||||
Below is a list of currently supported PiTFT models in meta-raspberrypi, the
|
||||
modelname should be added as a MACHINE_FEATURES in local.conf like below:
|
||||
|
||||
MACHINE_FEATURES += "pitft <modelname>"
|
||||
|
||||
List of currently supported models:
|
||||
* pitft22
|
||||
* pitft28r
|
||||
* pitft35r
|
||||
|
||||
## Misc. display
|
||||
|
||||
If you would like to use the Waveshare "C" 1024×600, 7 inch Capacitive Touch
|
||||
Screen LCD, HDMI interface (<http://www.waveshare.com/7inch-HDMI-LCD-C.htm>) Rev
|
||||
2.1, please set the following in your local.conf:
|
||||
|
||||
WAVESHARE_1024X600_C_2_1 = "1"
|
||||
|
||||
## Enable UART
|
||||
|
||||
RaspberryPi 0, 1, 2 and CM will have UART console enabled by default.
|
||||
|
||||
RaspberryPi 0 WiFi and 3 does not have the UART enabled by default because this
|
||||
needs a fixed core frequency and enable_uart wil set it to the minimum. Certain
|
||||
operations - 60fps h264 decode, high quality deinterlace - which aren't
|
||||
performed on the ARM may be affected, and we wouldn't want to do that to users
|
||||
who don't want to use the serial port. Users who want serial console support on
|
||||
RaspberryPi3 will have to explicitely set in local.conf:
|
||||
|
||||
ENABLE_UART = "1"
|
||||
|
||||
Ref.:
|
||||
* <https://github.com/raspberrypi/firmware/issues/553>
|
||||
* <https://github.com/RPi-Distro/repo/issues/22>
|
||||
@@ -1,26 +0,0 @@
|
||||
.. meta-raspberrypi documentation master file, created by
|
||||
sphinx-quickstart on Tue May 23 09:51:24 2017.
|
||||
You can adapt this file completely to your liking, but it should at least
|
||||
contain the root `toctree` directive.
|
||||
|
||||
Welcome to meta-raspberrypi's documentation!
|
||||
============================================
|
||||
|
||||
Contents:
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
readme
|
||||
layer-contents
|
||||
extra-build-config
|
||||
extra-apps
|
||||
contributing
|
||||
|
||||
Indices and tables
|
||||
==================
|
||||
|
||||
* :ref:`genindex`
|
||||
* :ref:`modindex`
|
||||
* :ref:`search`
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
# Layer Contents
|
||||
|
||||
## Supported Machines
|
||||
|
||||
* raspberrypi
|
||||
* raspberrypi0
|
||||
* raspberrypi0-wifi
|
||||
* raspberrypi2
|
||||
* raspberrypi3
|
||||
* raspberrypi3-64 (64 bit kernel & userspace)
|
||||
* raspberrypi-cm (dummy alias for raspberrypi)
|
||||
* raspberrypi-cm3 (dummy alias for raspberrypi2)
|
||||
|
||||
## Images
|
||||
|
||||
* rpi-hwup-image
|
||||
* Hardware up image
|
||||
|
||||
* rpi-basic-image
|
||||
* Based on rpi-hwup-image with some added features (ex: splash)
|
||||
|
||||
* rpi-test-image
|
||||
* Image based on rpi-basic-image which includes most of the packages in this
|
||||
layer and some media samples.
|
||||
@@ -1 +0,0 @@
|
||||
../README.md
|
||||
@@ -1,25 +0,0 @@
|
||||
Copyright (c) 2012, Broadcom Europe Ltd
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
* Neither the name of the copyright holder nor the
|
||||
names of its contributors may be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
@@ -5,38 +5,38 @@ SECTION = "base"
|
||||
HOMEPAGE = "http://www.open.com.au/mikem/bcm2835"
|
||||
AUTHOR = "Mike McCauley (mikem@open.com.au)"
|
||||
|
||||
LICENSE = "GPLv2"
|
||||
LICENSE = "GPL-2.0"
|
||||
LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
|
||||
|
||||
PR = "r0"
|
||||
|
||||
COMPATIBLE_MACHINE = "raspberrypi"
|
||||
|
||||
SRC_URI = "http://www.airspayce.com/mikem/bcm2835/bcm2835-${PV}.tar.gz"
|
||||
SRC_URI = "http://www.open.com.au/mikem/bcm2835/bcm2835-1.8.tar.gz"
|
||||
|
||||
SRC_URI[md5sum] = "b5dc426b4ff258bb1397442f98e40236"
|
||||
SRC_URI[sha256sum] = "b9fd10f7a80aadaed28a77168709b7c519568a63b6e98d0a50e9c5fe31bea6bb"
|
||||
SRC_URI[md5sum] = "cca8500049d4ebf9087de4bd1601d185"
|
||||
SRC_URI[sha256sum] = "64be77b10aaf48ecb2a9022e13057f3b564093916875c0fc56373b4142dd5cae"
|
||||
|
||||
PACKAGES += "${PN}-tests"
|
||||
|
||||
FILES_${PN} = ""
|
||||
FILES_${PN}-tests = "${libdir}/${BPN}"
|
||||
FILES_${PN}-dbg += "${libdir}/${BPN}/.debug"
|
||||
|
||||
inherit autotools
|
||||
|
||||
do_compile_append() {
|
||||
# Now compiling the examples provided by the package
|
||||
mkdir -p ${B}/examples
|
||||
for file in `ls ${S}/examples`; do
|
||||
${CC} ${LDFLAGS} ${S}/examples/${file}/${file}.c -o ${B}/examples/${file} -Bstatic -L${B}/src -lbcm2835 -I${S}/src
|
||||
#Now compiling the examples provided by the package
|
||||
for file in examples/*
|
||||
do
|
||||
${CC} ${file}/${file##*/}.c -o ${file}/${file##*/} -Bstatic -L${S}/src -lbcm2835 -I${S}/src
|
||||
done
|
||||
}
|
||||
|
||||
do_install_append() {
|
||||
install -d ${D}/${libdir}/${BPN}
|
||||
for file in ${B}/examples/*
|
||||
for file in examples/*
|
||||
do
|
||||
install -m 0755 ${file} ${D}/${libdir}/${BPN}
|
||||
install -m 0755 ${file}/${file##*/} ${D}/${libdir}/${BPN}
|
||||
done
|
||||
}
|
||||
|
||||
PACKAGES += "${PN}-tests"
|
||||
|
||||
RDEPENDS_${PN}-dev = ""
|
||||
|
||||
FILES_${PN} = ""
|
||||
FILES_${PN}-tests = "${libdir}/${BPN}"
|
||||
FILES_${PN}-dbg += "${libdir}/${BPN}/.debug"
|
||||
34
recipes-bcm/bootfiles/bcm2835-bootfiles.bb
Normal file
34
recipes-bcm/bootfiles/bcm2835-bootfiles.bb
Normal file
@@ -0,0 +1,34 @@
|
||||
DESCRIPTION = "Closed source binary files to help boot the ARM on the BCM2835."
|
||||
LICENSE = "Proprietary"
|
||||
|
||||
LIC_FILES_CHKSUM = "file://LICENCE.broadcom;md5=e86e693d19572ee64cc8b17fb062faa9"
|
||||
|
||||
include ../common/firmware.inc
|
||||
|
||||
RDEPENDS_${PN} = "rpi-config"
|
||||
|
||||
COMPATIBLE_MACHINE = "raspberrypi"
|
||||
|
||||
SRC_URI = " \
|
||||
git://github.com/raspberrypi/firmware.git;protocol=git;branch=master \
|
||||
"
|
||||
|
||||
S = "${WORKDIR}/git/boot"
|
||||
|
||||
PR = "r2"
|
||||
|
||||
addtask deploy before do_package after do_install
|
||||
|
||||
do_deploy() {
|
||||
install -d ${DEPLOY_DIR_IMAGE}/bcm2835-bootfiles
|
||||
for i in *.elf ; do
|
||||
cp $i ${DEPLOY_DIR_IMAGE}/bcm2835-bootfiles
|
||||
done
|
||||
for i in *.bin ; do
|
||||
cp $i ${DEPLOY_DIR_IMAGE}/bcm2835-bootfiles
|
||||
done
|
||||
# Add stamp in deploy directory
|
||||
touch ${DEPLOY_DIR_IMAGE}/bcm2835-bootfiles/${PN}-${PV}.stamp
|
||||
}
|
||||
|
||||
PACKAGE_ARCH = "${MACHINE_ARCH}"
|
||||
46
recipes-bcm/bootfiles/rpi-config_0.1.bb
Normal file
46
recipes-bcm/bootfiles/rpi-config_0.1.bb
Normal file
@@ -0,0 +1,46 @@
|
||||
DESCRIPTION = "Commented config.txt file for the Raspberry Pi. \
|
||||
The Raspberry Pi config.txt file is read by the GPU before \
|
||||
the ARM core is initialised. It can be used to set various \
|
||||
system configuration parameters."
|
||||
LICENSE = "MIT"
|
||||
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
|
||||
|
||||
COMPATIBLE_MACHINE = "raspberrypi"
|
||||
|
||||
SRCREV = "afeaed02ba5f01298dec3ac4e1bd98f27bcd876e"
|
||||
SRC_URI = "git://github.com/Evilpaul/RPi-config.git;protocol=git;branch=master \
|
||||
"
|
||||
|
||||
S = "${WORKDIR}/git"
|
||||
|
||||
PR = "r1"
|
||||
|
||||
addtask deploy before do_package after do_install
|
||||
|
||||
do_deploy() {
|
||||
install -d ${DEPLOY_DIR_IMAGE}/bcm2835-bootfiles
|
||||
cp config.txt ${DEPLOY_DIR_IMAGE}/bcm2835-bootfiles/
|
||||
if [ -n "${KEY_DECODE_MPG2}" ]; then
|
||||
sed -i '/#decode_MPG2/ c\decode_MPG2=${KEY_DECODE_MPG2}' ${DEPLOY_DIR_IMAGE}/bcm2835-bootfiles/config.txt
|
||||
fi
|
||||
if [ -n "${KEY_DECODE_WVC1}" ]; then
|
||||
sed -i '/#decode_WVC1/ c\decode_MVC1=${KEY_DECODE_WVC1}' ${DEPLOY_DIR_IMAGE}/bcm2835-bootfiles/config.txt
|
||||
fi
|
||||
if [ -n "${DISABLE_OVERSCAN}" ]; then
|
||||
sed -i '/#disable_overscan/ c\disable_overscan=${DISABLE_OVERSCAN}' ${DEPLOY_DIR_IMAGE}/bcm2835-bootfiles/config.txt
|
||||
fi
|
||||
if [ -n "${ARM_FREQ}" ]; then
|
||||
sed -i '/#arm_freq/ c\arm_freq=${ARM_FREQ}' ${DEPLOY_DIR_IMAGE}/bcm2835-bootfiles/config.txt
|
||||
fi
|
||||
if [ -n "${CORE_FREQ}" ]; then
|
||||
sed -i '/#core_freq/ c\core_freq=${CORE_FREQ}' ${DEPLOY_DIR_IMAGE}/bcm2835-bootfiles/config.txt
|
||||
fi
|
||||
if [ -n "${SDRAM_FREQ}" ]; then
|
||||
sed -i '/#sdram_freq/ c\sdram_freq=${SDRAM_FREQ}' ${DEPLOY_DIR_IMAGE}/bcm2835-bootfiles/config.txt
|
||||
fi
|
||||
if [ -n "${OVER_VOLTAGE}" ]; then
|
||||
sed -i '/#over_voltage/ c\over_voltage=${OVER_VOLTAGE}' ${DEPLOY_DIR_IMAGE}/bcm2835-bootfiles/config.txt
|
||||
fi
|
||||
}
|
||||
|
||||
PACKAGE_ARCH = "${MACHINE_ARCH}"
|
||||
6
recipes-bcm/common/firmware.inc
Normal file
6
recipes-bcm/common/firmware.inc
Normal file
@@ -0,0 +1,6 @@
|
||||
# 13/09/2012 firmware; this can be overridden from distro config
|
||||
RPIFW_SRCREV ?= "b616053edb93713efa25299cb4ea7efa439dcb61"
|
||||
RPIFW_DATE ?= "20120913"
|
||||
|
||||
SRCREV = "${RPIFW_SRCREV}"
|
||||
PV = "${RPIFW_DATE}"
|
||||
@@ -1,6 +1,8 @@
|
||||
|
||||
CONFLICTS = "vc-graphics"
|
||||
|
||||
VCDIR = "hardfp/opt/vc"
|
||||
require vc-graphics.inc
|
||||
|
||||
PR = "${INCPR}.0"
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
|
||||
CONFLICTS = "vc-graphics-hardfp"
|
||||
|
||||
VCDIR = "opt/vc"
|
||||
require vc-graphics.inc
|
||||
|
||||
PR = "${INCPR}.0"
|
||||
|
||||
@@ -3,19 +3,18 @@ LICENSE = "Proprietary"
|
||||
|
||||
LIC_FILES_CHKSUM = "file://LICENCE;md5=86e53f5f5909ee66900418028de11780"
|
||||
|
||||
PROVIDES = "virtual/libgles2 virtual/egl"
|
||||
PROVIDES = "virtual/libgl virtual/libgles2 virtual/egl"
|
||||
COMPATIBLE_MACHINE = "raspberrypi"
|
||||
|
||||
include recipes-bsp/common/firmware.inc
|
||||
include ../common/firmware.inc
|
||||
|
||||
SRC_URI += " \
|
||||
file://egl.pc \
|
||||
file://vchiq.sh \
|
||||
"
|
||||
SRC_URI = "git://github.com/raspberrypi/firmware.git;protocol=git;branch=master\
|
||||
file://egl.pc \
|
||||
file://vchiq.sh"
|
||||
|
||||
S = "${RPIFW_S}/${VCDIR}"
|
||||
S = "${WORKDIR}/git/${VCDIR}"
|
||||
|
||||
INCPR = "r1"
|
||||
INCPR = "r0"
|
||||
|
||||
inherit pkgconfig update-rc.d
|
||||
|
||||
@@ -49,8 +48,6 @@ INITSCRIPT_PARAMS = "start 03 S ."
|
||||
FILES_${PN} = "${bindir}/* \
|
||||
${sbindir}/* \
|
||||
${libdir}/lib*.so \
|
||||
${sysconfdir}/init.d \
|
||||
${libdir}/plugins"
|
||||
${sysconfdir}/init.d"
|
||||
FILES_${PN}-dev = "${libdir}/pkgconfig \
|
||||
${includedir}"
|
||||
FILES_${PN}-dbg += "${libdir}/plugins/.debug"
|
||||
@@ -1,39 +0,0 @@
|
||||
DESCRIPTION = "Closed source binary files to help boot the ARM on the BCM2835."
|
||||
LICENSE = "Proprietary"
|
||||
|
||||
LIC_FILES_CHKSUM = "file://LICENCE.broadcom;md5=4a4d169737c0786fb9482bb6d30401d1"
|
||||
|
||||
inherit deploy
|
||||
|
||||
include recipes-bsp/common/firmware.inc
|
||||
|
||||
RDEPENDS_${PN} = "rpi-config"
|
||||
|
||||
COMPATIBLE_MACHINE = "raspberrypi"
|
||||
|
||||
S = "${RPIFW_S}/boot"
|
||||
|
||||
PR = "r3"
|
||||
|
||||
do_deploy() {
|
||||
install -d ${DEPLOYDIR}/${PN}
|
||||
|
||||
for i in ${S}/*.elf ; do
|
||||
cp $i ${DEPLOYDIR}/${PN}
|
||||
done
|
||||
for i in ${S}/*.dat ; do
|
||||
cp $i ${DEPLOYDIR}/${PN}
|
||||
done
|
||||
for i in ${S}/*.bin ; do
|
||||
cp $i ${DEPLOYDIR}/${PN}
|
||||
done
|
||||
|
||||
# Add stamp in deploy directory
|
||||
touch ${DEPLOYDIR}/${PN}/${PN}-${PV}.stamp
|
||||
}
|
||||
|
||||
addtask deploy before do_package after do_install
|
||||
do_deploy[dirs] += "${DEPLOYDIR}/${PN}"
|
||||
|
||||
PACKAGE_ARCH = "${MACHINE_ARCH}"
|
||||
|
||||
@@ -1,140 +0,0 @@
|
||||
DESCRIPTION = "Commented config.txt file for the Raspberry Pi. \
|
||||
The Raspberry Pi config.txt file is read by the GPU before \
|
||||
the ARM core is initialised. It can be used to set various \
|
||||
system configuration parameters."
|
||||
LICENSE = "MIT"
|
||||
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
|
||||
|
||||
COMPATIBLE_MACHINE = "raspberrypi"
|
||||
|
||||
SRCREV = "648ffc470824c43eb0d16c485f4c24816b32cd6f"
|
||||
SRC_URI = "git://github.com/Evilpaul/RPi-config.git;protocol=git;branch=master \
|
||||
"
|
||||
|
||||
S = "${WORKDIR}/git"
|
||||
|
||||
PR = "r5"
|
||||
|
||||
PITFT="${@bb.utils.contains("MACHINE_FEATURES", "pitft", "1", "0", d)}"
|
||||
PITFT22="${@bb.utils.contains("MACHINE_FEATURES", "pitft22", "1", "0", d)}"
|
||||
PITFT28r="${@bb.utils.contains("MACHINE_FEATURES", "pitft28r", "1", "0", d)}"
|
||||
PITFT35r="${@bb.utils.contains("MACHINE_FEATURES", "pitft35r", "1", "0", d)}"
|
||||
|
||||
VC4GRAPHICS="${@bb.utils.contains("MACHINE_FEATURES", "vc4graphics", "1", "0", d)}"
|
||||
|
||||
inherit deploy
|
||||
|
||||
do_deploy() {
|
||||
install -d ${DEPLOYDIR}/bcm2835-bootfiles
|
||||
|
||||
cp ${S}/config.txt ${DEPLOYDIR}/bcm2835-bootfiles/
|
||||
|
||||
if [ -n "${KEY_DECODE_MPG2}" ]; then
|
||||
sed -i '/#decode_MPG2/ c\decode_MPG2=${KEY_DECODE_MPG2}' ${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
fi
|
||||
if [ -n "${KEY_DECODE_WVC1}" ]; then
|
||||
sed -i '/#decode_WVC1/ c\decode_WVC1=${KEY_DECODE_WVC1}' ${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
fi
|
||||
if [ -n "${DISABLE_OVERSCAN}" ]; then
|
||||
sed -i '/#disable_overscan/ c\disable_overscan=${DISABLE_OVERSCAN}' ${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
fi
|
||||
if [ -n "${ARM_FREQ}" ]; then
|
||||
sed -i '/#arm_freq/ c\arm_freq=${ARM_FREQ}' ${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
fi
|
||||
if [ -n "${CORE_FREQ}" ]; then
|
||||
sed -i '/#core_freq/ c\core_freq=${CORE_FREQ}' ${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
fi
|
||||
if [ -n "${SDRAM_FREQ}" ]; then
|
||||
sed -i '/#sdram_freq/ c\sdram_freq=${SDRAM_FREQ}' ${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
fi
|
||||
if [ -n "${OVER_VOLTAGE}" ]; then
|
||||
sed -i '/#over_voltage/ c\over_voltage=${OVER_VOLTAGE}' ${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
fi
|
||||
|
||||
# GPU memory
|
||||
if [ -n "${GPU_MEM}" ]; then
|
||||
sed -i '/#gpu_mem=/ c\gpu_mem=${GPU_MEM}' ${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
fi
|
||||
if [ -n "${GPU_MEM_256}" ]; then
|
||||
sed -i '/#gpu_mem_256/ c\gpu_mem_256=${GPU_MEM_256}' ${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
fi
|
||||
if [ -n "${GPU_MEM_512}" ]; then
|
||||
sed -i '/#gpu_mem_512/ c\gpu_mem_512=${GPU_MEM_512}' ${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
fi
|
||||
if [ -n "${GPU_MEM_1024}" ]; then
|
||||
sed -i '/#gpu_mem_1024/ c\gpu_mem_1024=${GPU_MEM_1024}' ${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
fi
|
||||
|
||||
# Video camera support
|
||||
if [ -n "${VIDEO_CAMERA}" ]; then
|
||||
echo "# Enable video camera" >>${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
echo "start_x=1" >>${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
fi
|
||||
|
||||
# Offline compositing support
|
||||
if [ -n "${DISPMANX_OFFLINE}" ]; then
|
||||
echo "# Enable offline compositing" >>${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
echo "dispmanx_offline=1" >>${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
fi
|
||||
|
||||
# SPI bus support
|
||||
if [ -n "${ENABLE_SPI_BUS}" ] || [ "${PITFT}" = "1" ]; then
|
||||
echo "# Enable SPI bus" >>${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
echo "dtparam=spi=on" >>${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
fi
|
||||
|
||||
if [ -n "${ENABLE_I2C}" ] || [ "${PITFT}" = "1" ]; then
|
||||
echo "# Enable I2C" >>${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
echo "dtparam=i2c1=on" >>${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
echo "dtparam=i2c_arm=on" >>${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
fi
|
||||
|
||||
# PiTFT22 display support
|
||||
if [ "${PITFT22}" = "1" ]; then
|
||||
echo "# Enable PITFT22 display" >>${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
echo "dtoverlay=pitft22,rotate=270,speed=32000000,txbuflen=32768" >>${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
fi
|
||||
|
||||
if [ "${PITFT28r}" = "1" ]; then
|
||||
echo "# Enable PITFT28r display" >>${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
echo "dtoverlay=pitft28-resistive,rotate=90,speed=32000000,txbuflen=32768" >>${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
fi
|
||||
|
||||
if [ "${PITFT35r}" = "1" ]; then
|
||||
echo "# Enable PITFT35r display" >>${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
echo "dtoverlay=pitft35-resistive,rotate=90,speed=42000000,fps=20" >>${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
fi
|
||||
|
||||
# UART support
|
||||
if [ "${ENABLE_UART}" = "1" ]; then
|
||||
echo "# Enable UART" >>${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
echo "enable_uart=1" >>${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
fi
|
||||
|
||||
# VC4 Graphics support
|
||||
if [ "${VC4GRAPHICS}" = "1" ]; then
|
||||
echo "# Enable VC4 Graphics" >> ${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
echo "dtoverlay=vc4-kms-v3d,${VC4_CMA_SIZE}" >> ${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
fi
|
||||
|
||||
# Waveshare "C" 1024x600 7" Rev2.1 IPS capacitive touch (http://www.waveshare.com/7inch-HDMI-LCD-C.htm)
|
||||
if [ "${WAVESHARE_1024X600_C_2_1}" = "1" ]; then
|
||||
echo "# Waveshare \"C\" 1024x600 7\" Rev2.1 IPS capacitive touch screen" >> ${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
echo "max_usb_current=1" >> ${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
echo "hdmi_group=2" >> ${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
echo "hdmi_mode=87" >> ${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
echo "hdmi_cvt 1024 600 60 6 0 0 0" >> ${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
echo "hdmi_drive=1" >> ${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
fi
|
||||
}
|
||||
|
||||
do_deploy_append_raspberrypi3-64() {
|
||||
# Device Tree support
|
||||
echo "# Load correct Device Tree for Aarch64" >>${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
echo "device_tree=bcm2710-rpi-3-b.dtb" >>${DEPLOYDIR}/bcm2835-bootfiles/config.txt
|
||||
}
|
||||
|
||||
addtask deploy before do_package after do_install
|
||||
do_deploy[dirs] += "${DEPLOYDIR}/bcm2835-bootfiles"
|
||||
|
||||
PACKAGE_ARCH = "${MACHINE_ARCH}"
|
||||
@@ -1,9 +0,0 @@
|
||||
RPIFW_DATE ?= "20171029"
|
||||
RPIFW_SRC_URI ?= "https://github.com/raspberrypi/firmware/archive/1.${RPIFW_DATE}.tar.gz"
|
||||
RPIFW_S ?= "${WORKDIR}/firmware-1.${RPIFW_DATE}"
|
||||
|
||||
SRC_URI = "${RPIFW_SRC_URI}"
|
||||
SRC_URI[md5sum] = "4d27c1888a7bab3097471906e7b4a319"
|
||||
SRC_URI[sha256sum] = "46ce28c8d87ef22bdcc57ac1836ca3f04d1ec6f46580ff5a30bf76b3c0822117"
|
||||
PV = "${RPIFW_DATE}"
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
|
||||
PRINC = "1"
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
fdt addr ${fdt_addr} && fdt get value bootargs /chosen bootargs
|
||||
fatload mmc 0:1 ${kernel_addr_r} uImage
|
||||
bootm ${kernel_addr_r} - ${fdt_addr}
|
||||
@@ -1,21 +0,0 @@
|
||||
SUMMARY = "U-boot boot scripts for Raspberry Pi"
|
||||
LICENSE = "MIT"
|
||||
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
|
||||
COMPATIBLE_MACHINE = "rpi"
|
||||
|
||||
DEPENDS = "u-boot-mkimage-native"
|
||||
|
||||
SRC_URI = "file://boot.cmd"
|
||||
|
||||
do_compile() {
|
||||
mkimage -A arm -T script -C none -n "Boot script" -d "${WORKDIR}/boot.cmd" boot.scr
|
||||
}
|
||||
|
||||
inherit deploy
|
||||
|
||||
do_deploy() {
|
||||
install -d ${DEPLOYDIR}
|
||||
install -m 0644 boot.scr ${DEPLOYDIR}
|
||||
}
|
||||
|
||||
addtask do_deploy after do_compile before do_build
|
||||
@@ -1 +0,0 @@
|
||||
RDEPENDS_${PN}_append_rpi = " rpi-u-boot-scr"
|
||||
@@ -1,26 +0,0 @@
|
||||
From b4f2b77472aeb967d3a7595e8a965785c7a37c87 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Tue, 16 Feb 2016 16:40:46 +0000
|
||||
Subject: [PATCH 1/4] bcm43xx: Add bcm43xx-3wire variant
|
||||
|
||||
---
|
||||
tools/hciattach.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/tools/hciattach.c b/tools/hciattach.c
|
||||
index 59a76a7..5861d33 100644
|
||||
--- a/tools/hciattach.c
|
||||
+++ b/tools/hciattach.c
|
||||
@@ -1144,6 +1144,9 @@ struct uart_t uart[] = {
|
||||
{ "bcm43xx", 0x0000, 0x0000, HCI_UART_H4, 115200, 3000000,
|
||||
FLOW_CTL, DISABLE_PM, NULL, bcm43xx, NULL },
|
||||
|
||||
+ { "bcm43xx-3wire", 0x0000, 0x0000, HCI_UART_3WIRE, 115200, 3000000,
|
||||
+ 0, DISABLE_PM, NULL, bcm43xx, NULL },
|
||||
+
|
||||
{ "ath3k", 0x0000, 0x0000, HCI_UART_ATH3K, 115200, 115200,
|
||||
FLOW_CTL, DISABLE_PM, NULL, ath3k_ps, ath3k_pm },
|
||||
|
||||
--
|
||||
1.9.1
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
From e145c9621f976063e5c573db1f2053d906f63427 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Tue, 16 Feb 2016 16:39:09 +0000
|
||||
Subject: [PATCH 2/4] bcm43xx: The UART speed must be reset after the firmware download
|
||||
|
||||
---
|
||||
tools/hciattach_bcm43xx.c | 6 ++----
|
||||
1 file changed, 2 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/tools/hciattach_bcm43xx.c b/tools/hciattach_bcm43xx.c
|
||||
index 81f38cb..0b792e0 100644
|
||||
--- a/tools/hciattach_bcm43xx.c
|
||||
+++ b/tools/hciattach_bcm43xx.c
|
||||
@@ -366,11 +366,8 @@ int bcm43xx_init(int fd, int def_speed, int speed, struct termios *ti,
|
||||
return -1;
|
||||
|
||||
if (bcm43xx_locate_patch(FIRMWARE_DIR, chip_name, fw_path)) {
|
||||
- fprintf(stderr, "Patch not found, continue anyway\n");
|
||||
+ fprintf(stderr, "Patch not found for %s, continue anyway\n", chip_name);
|
||||
} else {
|
||||
- if (bcm43xx_set_speed(fd, ti, speed))
|
||||
- return -1;
|
||||
-
|
||||
if (bcm43xx_load_firmware(fd, fw_path))
|
||||
return -1;
|
||||
|
||||
@@ -380,6 +377,7 @@ int bcm43xx_init(int fd, int def_speed, int speed, struct termios *ti,
|
||||
return -1;
|
||||
}
|
||||
|
||||
+ sleep(1);
|
||||
if (bcm43xx_reset(fd))
|
||||
return -1;
|
||||
}
|
||||
--
|
||||
1.9.1
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
From d41dc2046dd08d8c95197f677e224506f5b39bdd Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Wed, 20 Jan 2016 16:00:37 +0000
|
||||
Subject: [PATCH 3/4] Increase firmware load timeout to 30s
|
||||
|
||||
---
|
||||
tools/hciattach.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/tools/hciattach.c b/tools/hciattach.c
|
||||
index 5861d33..4141796 100644
|
||||
--- a/tools/hciattach.c
|
||||
+++ b/tools/hciattach.c
|
||||
@@ -1293,7 +1293,7 @@ int main(int argc, char *argv[])
|
||||
{
|
||||
struct uart_t *u = NULL;
|
||||
int detach, printpid, raw, opt, i, n, ld, err;
|
||||
- int to = 10;
|
||||
+ int to = 30;
|
||||
int init_speed = 0;
|
||||
int send_break = 0;
|
||||
pid_t pid;
|
||||
--
|
||||
1.9.1
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
From 76681284b0ea49852041fdb97a35175089a08781 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Tue, 23 Feb 2016 17:52:29 +0000
|
||||
Subject: [PATCH 4/4] Move the 43xx firmware into /lib/firmware
|
||||
|
||||
---
|
||||
tools/hciattach_bcm43xx.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/tools/hciattach_bcm43xx.c b/tools/hciattach_bcm43xx.c
|
||||
index 0b792e0..207f668 100644
|
||||
--- a/tools/hciattach_bcm43xx.c
|
||||
+++ b/tools/hciattach_bcm43xx.c
|
||||
@@ -43,7 +43,7 @@
|
||||
#include "hciattach.h"
|
||||
|
||||
#ifndef FIRMWARE_DIR
|
||||
-#define FIRMWARE_DIR "/etc/firmware"
|
||||
+#define FIRMWARE_DIR "/lib/firmware"
|
||||
#endif
|
||||
|
||||
#define FW_EXT ".hcd"
|
||||
--
|
||||
1.9.1
|
||||
|
||||
Binary file not shown.
@@ -1,12 +0,0 @@
|
||||
[Unit]
|
||||
Description=Broadcom BCM43438 bluetooth HCI
|
||||
ConditionPathIsDirectory=/proc/device-tree/soc/gpio@7e200000/bt_pins
|
||||
Before=bluetooth.service
|
||||
After=dev-ttyAMA0.device
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=/usr/bin/hciattach -n /dev/ttyAMA0 bcm43xx 921600 noflow -
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -1,26 +0,0 @@
|
||||
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
|
||||
|
||||
SRC_URI_append_raspberrypi3 = " \
|
||||
file://BCM43430A1.hcd \
|
||||
file://0001-bcm43xx-Add-bcm43xx-3wire-variant.patch \
|
||||
file://0002-bcm43xx-The-UART-speed-must-be-reset-after-the-firmw.patch \
|
||||
file://0003-Increase-firmware-load-timeout-to-30s.patch \
|
||||
file://0004-Move-the-43xx-firmware-into-lib-firmware.patch \
|
||||
file://brcm43438.service \
|
||||
"
|
||||
|
||||
do_install_append_raspberrypi3() {
|
||||
install -d ${D}/lib/firmware/brcm/
|
||||
install -m 0644 ${WORKDIR}/BCM43430A1.hcd ${D}/lib/firmware/brcm/BCM43430A1.hcd
|
||||
|
||||
if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
|
||||
install -d ${D}${systemd_unitdir}/system
|
||||
install -m 0644 ${WORKDIR}/brcm43438.service ${D}${systemd_unitdir}/system
|
||||
fi
|
||||
}
|
||||
|
||||
FILES_${PN}_append_raspberrypi3 = " \
|
||||
/lib/firmware/brcm/BCM43430A1.hcd \
|
||||
"
|
||||
|
||||
SYSTEMD_SERVICE_${PN}_append_raspberrypi3 = " brcm43438.service"
|
||||
9
recipes-core/base-files/base-files/raspberrypi/fstab
Normal file
9
recipes-core/base-files/base-files/raspberrypi/fstab
Normal file
@@ -0,0 +1,9 @@
|
||||
# stock fstab for the RaspberryPi - you may want to tweak this to suit.
|
||||
|
||||
rootfs / auto defaults,noatime 1 1
|
||||
proc /proc proc defaults 0 0
|
||||
devpts /dev/pts devpts mode=0620,gid=5 0 0
|
||||
usbfs /proc/bus/usb usbfs defaults 0 0
|
||||
tmpfs /var/volatile tmpfs defaults 0 0
|
||||
tmpfs /dev/shm tmpfs mode=0777 0 0
|
||||
tmpfs /media/ram tmpfs defaults 0 0
|
||||
33
recipes-core/base-files/base-files/raspberrypi/profile
Normal file
33
recipes-core/base-files/base-files/raspberrypi/profile
Normal file
@@ -0,0 +1,33 @@
|
||||
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
|
||||
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
|
||||
|
||||
PATH="/usr/local/bin:/usr/bin:/bin"
|
||||
EDITOR="/bin/vi" # needed for packages like cron
|
||||
test -z "$TERM" && TERM="vt100" # Basic terminal capab. For screen etc.
|
||||
|
||||
if [ ! -e /etc/localtime -a ! -e /etc/TZ ]; then
|
||||
TZ="UTC" # Time Zone. Look at http://theory.uwinnipeg.ca/gnu/glibc/libc_303.html
|
||||
# for an explanation of how to set this to your local timezone.
|
||||
export TZ
|
||||
fi
|
||||
|
||||
if [ "`id -u`" -eq 0 ]; then
|
||||
PATH=$PATH:/usr/local/sbin:/usr/sbin:/sbin:
|
||||
fi
|
||||
if [ "$PS1" ]; then
|
||||
# works for bash and ash (no other shells known to be in use here)
|
||||
PS1='\u@\h:\w\$ '
|
||||
fi
|
||||
|
||||
if [ -d /etc/profile.d ]; then
|
||||
for i in /etc/profile.d/*.sh; do
|
||||
if [ -r $i ]; then
|
||||
. $i
|
||||
fi
|
||||
done
|
||||
unset i
|
||||
fi
|
||||
|
||||
export PATH PS1 OPIEDIR QPEDIR QTDIR EDITOR TERM
|
||||
|
||||
umask 022
|
||||
3
recipes-core/base-files/base-files_3.0.14.bbappend
Normal file
3
recipes-core/base-files/base-files_3.0.14.bbappend
Normal file
@@ -0,0 +1,3 @@
|
||||
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
|
||||
# Don't forget to bump PRINC if you update the extra files.
|
||||
PRINC = "1"
|
||||
@@ -1,6 +1,4 @@
|
||||
# Base this image on rpi-hwup-image
|
||||
include rpi-hwup-image.bb
|
||||
|
||||
SPLASH = "psplash-raspberrypi"
|
||||
|
||||
IMAGE_FEATURES += "ssh-server-dropbear splash"
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
# Base this image on rpi-basic-image
|
||||
include rpi-basic-image.bb
|
||||
|
||||
IMAGE_INSTALL_append = " packagegroup-rpi-test"
|
||||
2
recipes-core/netbase/netbase-5.0/raspberrypi/hosts
Normal file
2
recipes-core/netbase/netbase-5.0/raspberrypi/hosts
Normal file
@@ -0,0 +1,2 @@
|
||||
127.0.0.1 localhost.localdomain localhost raspberrypi rpi
|
||||
|
||||
15
recipes-core/netbase/netbase-5.0/raspberrypi/interfaces
Normal file
15
recipes-core/netbase/netbase-5.0/raspberrypi/interfaces
Normal file
@@ -0,0 +1,15 @@
|
||||
# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
|
||||
|
||||
# The loopback interface
|
||||
auto lo
|
||||
iface lo inet loopback
|
||||
|
||||
# Wireless interfaces
|
||||
iface wlan0 inet dhcp
|
||||
wireless_mode managed
|
||||
wireless_essid any
|
||||
wpa-driver wext
|
||||
wpa-conf /etc/wpa_supplicant.conf
|
||||
|
||||
# Bluetooth networking
|
||||
iface bnep0 inet dhcp
|
||||
3
recipes-core/netbase/netbase_5.0.bbappend
Normal file
3
recipes-core/netbase/netbase_5.0.bbappend
Normal file
@@ -0,0 +1,3 @@
|
||||
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
|
||||
# Don't forget to bump PRINC if you update the extra files.
|
||||
PRINC = "1"
|
||||
@@ -1,27 +0,0 @@
|
||||
DESCRIPTION = "RaspberryPi Test Packagegroup"
|
||||
LICENSE = "MIT"
|
||||
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
|
||||
|
||||
inherit packagegroup
|
||||
|
||||
RDEPENDS_${PN} = "\
|
||||
omxplayer \
|
||||
bcm2835-tests \
|
||||
wiringpi \
|
||||
rpio \
|
||||
rpi-gpio \
|
||||
pi-blaster \
|
||||
python-rtimu \
|
||||
python-sense-hat \
|
||||
connman \
|
||||
connman-client \
|
||||
crda \
|
||||
bluez5 \
|
||||
"
|
||||
|
||||
RRECOMMENDS_${PN} = "\
|
||||
bigbuckbunny-1080p \
|
||||
bigbuckbunny-480p \
|
||||
bigbuckbunny-720p \
|
||||
${MACHINE_EXTRA_RRECOMMENDS} \
|
||||
"
|
||||
@@ -1,4 +1,2 @@
|
||||
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
|
||||
SPLASH_IMAGES_append_rpi = " file://psplash-raspberrypi-img.h;outsuffix=raspberrypi"
|
||||
ALTERNATIVE_PRIORITY_psplash-raspberrypi[psplash] = "10"
|
||||
|
||||
SPLASH_IMAGES = "file://psplash-raspberrypi-img.h;outsuffix=default"
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
DESCRIPTION = "udev rules for Raspberry Pi Boards"
|
||||
LICENSE = "MIT"
|
||||
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
|
||||
|
||||
SRC_URI = " file://99-com.rules"
|
||||
|
||||
S = "${WORKDIR}"
|
||||
|
||||
do_install () {
|
||||
install -d ${D}${sysconfdir}/udev/rules.d
|
||||
install -m 0644 ${WORKDIR}/99-com.rules ${D}${sysconfdir}/udev/rules.d/
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
KERNEL=="ttyAMA[01]", PROGRAM="/bin/sh -c '\
|
||||
ALIASES=/proc/device-tree/aliases; \
|
||||
if cmp -s $ALIASES/uart0 $ALIASES/serial0; then \
|
||||
echo 0;\
|
||||
elif cmp -s $ALIASES/uart0 $ALIASES/serial1; then \
|
||||
echo 1; \
|
||||
else \
|
||||
exit 1; \
|
||||
fi\
|
||||
'", SYMLINK+="serial%c"
|
||||
|
||||
KERNEL=="ttyS0", PROGRAM="/bin/sh -c '\
|
||||
ALIASES=/proc/device-tree/aliases; \
|
||||
if cmp -s $ALIASES/uart1 $ALIASES/serial0; then \
|
||||
echo 0; \
|
||||
elif cmp -s $ALIASES/uart1 $ALIASES/serial1; then \
|
||||
echo 1; \
|
||||
else \
|
||||
exit 1; \
|
||||
fi \
|
||||
'", SYMLINK+="serial%c"
|
||||
@@ -1,96 +0,0 @@
|
||||
From 1338f98a279616f4e5e9ea30a25d1dfa0c7df5d6 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Petter=20Mab=C3=A4cker?= <petter@technux.se>
|
||||
Date: Sun, 4 Jun 2017 12:22:40 +0200
|
||||
Subject: [PATCH] Remove dependencies on LSB functions
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
See this as a rebase of the previous 'Remove dependencies on LSB
|
||||
functions patch' with only minor modifications from the original version,
|
||||
based on the work done by Alex Lennon <ajlennon@dynamicdevices.co.uk> in
|
||||
'25fd817 pi-blaster: Added recipe'.
|
||||
|
||||
Upstream-Status: Inappropriate [configuration]
|
||||
|
||||
Signed-off-by: Petter Mabäcker <petter@technux.se>
|
||||
---
|
||||
debian/pi-blaster.init | 38 +++++++-------------------------------
|
||||
1 file changed, 7 insertions(+), 31 deletions(-)
|
||||
|
||||
diff --git a/debian/pi-blaster.init b/debian/pi-blaster.init
|
||||
index b142d70..01a686c 100644
|
||||
--- a/debian/pi-blaster.init
|
||||
+++ b/debian/pi-blaster.init
|
||||
@@ -28,12 +28,12 @@ SCRIPTNAME=/etc/init.d/$NAME
|
||||
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
|
||||
|
||||
# Load the VERBOSE setting and other rcS variables
|
||||
-. /lib/init/vars.sh
|
||||
+#. /lib/init/vars.sh
|
||||
|
||||
# Define LSB log_* functions.
|
||||
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
|
||||
# and status_of_proc is working.
|
||||
-. /lib/lsb/init-functions
|
||||
+#. /lib/lsb/init-functions
|
||||
|
||||
#
|
||||
# Function that starts the daemon/service
|
||||
@@ -77,48 +77,24 @@ do_stop()
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
- [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
|
||||
+ [ "$VERBOSE" != no ] && echo "Starting $DESC" "$NAME"
|
||||
do_start
|
||||
- case "$?" in
|
||||
- 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
||||
- 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
||||
- esac
|
||||
;;
|
||||
stop)
|
||||
- [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
|
||||
+ [ "$VERBOSE" != no ] && echo "Stopping $DESC" "$NAME"
|
||||
do_stop
|
||||
- case "$?" in
|
||||
- 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
||||
- 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
||||
- esac
|
||||
- ;;
|
||||
- status)
|
||||
- status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
|
||||
;;
|
||||
restart|force-reload)
|
||||
#
|
||||
# If the "reload" option is implemented then remove the
|
||||
# 'force-reload' alias
|
||||
#
|
||||
- log_daemon_msg "Restarting $DESC" "$NAME"
|
||||
+ echo "Restarting $DESC" "$NAME"
|
||||
do_stop
|
||||
- case "$?" in
|
||||
- 0|1)
|
||||
- do_start
|
||||
- case "$?" in
|
||||
- 0) log_end_msg 0 ;;
|
||||
- 1) log_end_msg 1 ;; # Old process is still running
|
||||
- *) log_end_msg 1 ;; # Failed to start
|
||||
- esac
|
||||
- ;;
|
||||
- *)
|
||||
- # Failed to stop
|
||||
- log_end_msg 1
|
||||
- ;;
|
||||
- esac
|
||||
+ do_start
|
||||
;;
|
||||
*)
|
||||
- echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
|
||||
+ echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
|
||||
exit 3
|
||||
;;
|
||||
esac
|
||||
--
|
||||
1.9.1
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
DESCRIPTION = "This project enables PWM on the GPIO pins you request of a Raspberry Pi."
|
||||
HOMEPAGE = "https://github.com/sarfata/pi-blaster/"
|
||||
SECTION = "devel/libs"
|
||||
LICENSE = "MIT"
|
||||
LIC_FILES_CHKSUM = "file://README.md;beginline=212;endline=239;md5=a012868ef5f83b9f257af253d7cb07a3"
|
||||
|
||||
SRC_URI = "git://github.com/sarfata/pi-blaster \
|
||||
file://remove-initscript-lsb-dependency.patch \
|
||||
"
|
||||
|
||||
S = "${WORKDIR}/git"
|
||||
|
||||
inherit update-rc.d autotools
|
||||
|
||||
INITSCRIPT_PACKAGES = "${PN}"
|
||||
INITSCRIPT_NAME_${PN} = "${PN}.boot.sh"
|
||||
INITSCRIPT_PARAMS_${PN} = "defaults 15 85"
|
||||
|
||||
COMPATIBLE_MACHINE = "raspberrypi"
|
||||
|
||||
PACKAGE_ARCH = "${MACHINE_ARCH}"
|
||||
@@ -1,3 +0,0 @@
|
||||
require pi-blaster.inc
|
||||
|
||||
SRCREV = "9f45eb23a8a3b2d1c08d08a6d68f206fe91ecf4c"
|
||||
@@ -0,0 +1,16 @@
|
||||
We already have setuptools python module so we will use that and not the
|
||||
one provided in this package.
|
||||
|
||||
Upstream-Status: Inappropriate [embedded specific]
|
||||
Signed-off-by: Andrei Gherzan <andrei@gherzan.ro>
|
||||
|
||||
Index: RPi.GPIO-0.2.0/setup.py
|
||||
===================================================================
|
||||
--- RPi.GPIO-0.2.0.orig/setup.py 2012-05-24 13:17:31.000000000 +0300
|
||||
+++ RPi.GPIO-0.2.0/setup.py 2012-08-22 00:56:59.049001018 +0300
|
||||
@@ -1,6 +1,4 @@
|
||||
#!/usr/bin/env python
|
||||
-import distribute_setup
|
||||
-distribute_setup.use_setuptools()
|
||||
from setuptools import setup, find_packages
|
||||
import platform
|
||||
@@ -2,20 +2,20 @@ DESCRIPTION = "A module to control Raspberry Pi GPIO channels"
|
||||
HOMEPAGE = "http://code.google.com/p/raspberry-gpio-python/"
|
||||
SECTION = "devel/python"
|
||||
LICENSE = "MIT"
|
||||
LIC_FILES_CHKSUM = "file://LICENCE.txt;md5=9b95630a648966b142f1a0dcea001cb7"
|
||||
LIC_FILES_CHKSUM = "file://LICENCE.txt;md5=ee5754ae9d5f8061d6d4ccd9c9fe0061"
|
||||
|
||||
SRCNAME = "RPi.GPIO"
|
||||
PR = "r0"
|
||||
|
||||
SRC_URI = "\
|
||||
http://pypi.python.org/packages/source/R/RPi.GPIO/${SRCNAME}-${PV}.tar.gz \
|
||||
file://0001-Remove-nested-functions.patch \
|
||||
file://don-t-install-setuptools.patch \
|
||||
"
|
||||
SRC_URI[md5sum] = "9db86fd5f3bae872de9dbb068ee0b096"
|
||||
SRC_URI[sha256sum] = "82acff0ef6bbe3cdf6f4dbdd73d96add5294bb94baf7f51c1d901861af3c2392"
|
||||
|
||||
S = "${WORKDIR}/${SRCNAME}-${PV}"
|
||||
|
||||
inherit distutils
|
||||
inherit setuptools
|
||||
|
||||
COMPATIBLE_MACHINE = "raspberrypi"
|
||||
|
||||
SRC_URI[md5sum] = "0fc4bfa6aabc856b0b75252a40ac75cc"
|
||||
SRC_URI[sha256sum] = "fcfd97dc9687dde76b13b9d12c122e71b13e2ba09a62913d7b8d9ddbb3e8cabf"
|
||||
@@ -1,33 +0,0 @@
|
||||
From c3aa4af56652b403e304ea5f321acfe289e42922 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Sat, 30 Jan 2016 16:07:14 -0800
|
||||
Subject: [PATCH] include asm/ioctl.h for ioctl() define
|
||||
|
||||
also fixes errors e.g.
|
||||
|
||||
../../RTIMULib/RTIMUHal.cpp:208:29: error: '_IOC_SIZEBITS' was not
|
||||
declared in this scope
|
||||
return ioctl(m_SPI, SPI_IOC_MESSAGE(1), &wrIOC);
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
Upstream-Status: Submitted
|
||||
|
||||
RTIMULib/RTIMUHal.cpp | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/RTIMULib/RTIMUHal.cpp b/RTIMULib/RTIMUHal.cpp
|
||||
index f9c3d15..d968326 100644
|
||||
--- a/RTIMULib/RTIMUHal.cpp
|
||||
+++ b/RTIMULib/RTIMUHal.cpp
|
||||
@@ -29,6 +29,7 @@
|
||||
#if !defined(WIN32) && !defined(__APPLE__)
|
||||
|
||||
#include <linux/spi/spidev.h>
|
||||
+#include <asm/ioctl.h>
|
||||
|
||||
RTIMUHal::RTIMUHal()
|
||||
{
|
||||
--
|
||||
2.7.0
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
DESCRIPTION = "RTIMULib is a C++ and Python library that makes it easy to use 9-dof and \
|
||||
10-dof IMUs with embedded Linux systems"
|
||||
HOMEPAGE = "https://github.com/RPi-Distro/RTIMULib/"
|
||||
SECTION = "devel/python"
|
||||
LICENSE = "MIT"
|
||||
LIC_FILES_CHKSUM = "file://../../LICENSE;md5=96cdecb41125f498958e09b72faf318e"
|
||||
|
||||
SRC_URI = "git://github.com/RPi-Distro/RTIMULib.git;protocol=http;branch=master \
|
||||
file://0001-include-asm-ioctl.h-for-ioctl-define.patch;patchdir=../.. \
|
||||
"
|
||||
SRCREV = "b949681af69b45f0f7f4bb53b6770037b5b02178"
|
||||
|
||||
S = "${WORKDIR}/git/Linux/python/"
|
||||
|
||||
inherit setuptools
|
||||
@@ -1,28 +0,0 @@
|
||||
SUMMARY = "Python module to control the Raspberry Pi Sense HAT used in the Astro Pi mission"
|
||||
HOMEPAGE = "https://github.com/RPi-Distro/python-sense-hat"
|
||||
SECTION = "devel/python"
|
||||
LICENSE = "BSD"
|
||||
LIC_FILES_CHKSUM = "file://LICENCE.txt;md5=d80fe312e1ff5fbd97369b093bf21cda"
|
||||
|
||||
SRCNAME = "sense-hat"
|
||||
|
||||
SRC_URI = "https://pypi.python.org/packages/source/s/${SRCNAME}/${SRCNAME}-${PV}.tar.gz"
|
||||
|
||||
SRC_URI[md5sum] = "71217f15ea963040f06e2f50722186ca"
|
||||
SRC_URI[sha256sum] = "c6c76707c0ea514e4b0f1f96f1b5b79755875891aae037df7434b6aad7b9dbca"
|
||||
|
||||
S = "${WORKDIR}/${SRCNAME}-${PV}"
|
||||
|
||||
inherit setuptools
|
||||
|
||||
DEPENDS += " \
|
||||
jpeg \
|
||||
zlib \
|
||||
freetype \
|
||||
"
|
||||
|
||||
RDEPENDS_${PN} += " \
|
||||
python-numpy \
|
||||
python-rtimu \
|
||||
python-imaging \
|
||||
"
|
||||
@@ -1,294 +0,0 @@
|
||||
From 23d7ab77865f8b17042f5cd4c6720cca475e0eb5 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Wed, 13 Jan 2016 14:27:10 -0800
|
||||
Subject: [PATCH] Remove nested functions
|
||||
|
||||
nested functions are not supported on llvm/clang compiler, replacing
|
||||
them helps make code portable and be compilable with non-gcc compilers
|
||||
additionally fix the diagnostic messages clang reported
|
||||
|
||||
source/c_gpio.c:130:18: warning: comparison of distinct pointer types
|
||||
('volatile uint32_t *' (aka 'volatile unsigned int *') an
|
||||
d 'void *') [-Wcompare-distinct-pointer-types]
|
||||
if (gpio_map < MAP_FAILED)
|
||||
~~~~~~~~ ^ ~~~~~~~~~~
|
||||
|
||||
source/c_gpio.c:89:13: warning: variable 'peri_base' is used
|
||||
uninitialized whenever 'if' condition is false [-Wsometimes-uninit
|
||||
ialized]
|
||||
if (fread(buf, 1, sizeof buf, fp) == sizeof buf) {
|
||||
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
source/c_gpio.c:116:17: note: uninitialized use occurs here
|
||||
gpio_base = peri_base + GPIO_BASE_OFFSET;
|
||||
^~~~~~~~~
|
||||
source/c_gpio.c:89:9: note: remove the 'if' if its condition is always
|
||||
true
|
||||
if (fread(buf, 1, sizeof buf, fp) == sizeof buf) {
|
||||
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
source/c_gpio.c:64:23: note: initialize the variable 'peri_base' to
|
||||
silence this warning
|
||||
uint32_t peri_base;
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
Upstream-Status: Submitted
|
||||
|
||||
source/c_gpio.c | 6 +--
|
||||
source/py_gpio.c | 135 ++++++++++++++++++++++++++++---------------------------
|
||||
2 files changed, 71 insertions(+), 70 deletions(-)
|
||||
|
||||
diff --git a/source/c_gpio.c b/source/c_gpio.c
|
||||
index c96a2b0..b69880f 100644
|
||||
--- a/source/c_gpio.c
|
||||
+++ b/source/c_gpio.c
|
||||
@@ -61,7 +61,7 @@ int setup(void)
|
||||
{
|
||||
int mem_fd;
|
||||
uint8_t *gpio_mem;
|
||||
- uint32_t peri_base;
|
||||
+ uint32_t peri_base = 0;
|
||||
uint32_t gpio_base;
|
||||
unsigned char buf[4];
|
||||
FILE *fp;
|
||||
@@ -73,7 +73,7 @@ int setup(void)
|
||||
if ((mem_fd = open("/dev/gpiomem", O_RDWR|O_SYNC)) > 0)
|
||||
{
|
||||
gpio_map = (uint32_t *)mmap(NULL, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, mem_fd, 0);
|
||||
- if ((uint32_t)gpio_map < 0) {
|
||||
+ if (gpio_map == MAP_FAILED) {
|
||||
return SETUP_MMAP_FAIL;
|
||||
} else {
|
||||
return SETUP_OK;
|
||||
@@ -127,7 +127,7 @@ int setup(void)
|
||||
|
||||
gpio_map = (uint32_t *)mmap( (void *)gpio_mem, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_FIXED, mem_fd, gpio_base);
|
||||
|
||||
- if ((uint32_t)gpio_map < 0)
|
||||
+ if (gpio_map == MAP_FAILED)
|
||||
return SETUP_MMAP_FAIL;
|
||||
|
||||
return SETUP_OK;
|
||||
diff --git a/source/py_gpio.c b/source/py_gpio.c
|
||||
index d54cc7f..007bad5 100644
|
||||
--- a/source/py_gpio.c
|
||||
+++ b/source/py_gpio.c
|
||||
@@ -69,6 +69,20 @@ static int mmap_gpio_mem(void)
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
+static inline int cleanup_one(unsigned int gpio)
|
||||
+{
|
||||
+ // clean up any /sys/class exports
|
||||
+ event_cleanup(gpio);
|
||||
+
|
||||
+ // set everything back to input
|
||||
+ if (gpio_direction[gpio] != -1) {
|
||||
+ setup_gpio(gpio, INPUT, PUD_OFF);
|
||||
+ gpio_direction[gpio] = -1;
|
||||
+ return 1;
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
|
||||
// python function cleanup(channel=None)
|
||||
static PyObject *py_cleanup(PyObject *self, PyObject *args, PyObject *kwargs)
|
||||
@@ -83,19 +97,6 @@ static PyObject *py_cleanup(PyObject *self, PyObject *args, PyObject *kwargs)
|
||||
PyObject *tempobj;
|
||||
static char *kwlist[] = {"channel", NULL};
|
||||
|
||||
- void cleanup_one(void)
|
||||
- {
|
||||
- // clean up any /sys/class exports
|
||||
- event_cleanup(gpio);
|
||||
-
|
||||
- // set everything back to input
|
||||
- if (gpio_direction[gpio] != -1) {
|
||||
- setup_gpio(gpio, INPUT, PUD_OFF);
|
||||
- gpio_direction[gpio] = -1;
|
||||
- found = 1;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O", kwlist, &chanlist))
|
||||
return NULL;
|
||||
|
||||
@@ -140,7 +141,7 @@ static PyObject *py_cleanup(PyObject *self, PyObject *args, PyObject *kwargs)
|
||||
} else if (channel != -666) { // channel was an int indicating single channel
|
||||
if (get_gpio_number(channel, &gpio))
|
||||
return NULL;
|
||||
- cleanup_one();
|
||||
+ found = cleanup_one(gpio);
|
||||
} else { // channel was a list/tuple
|
||||
for (i=0; i<chancount; i++) {
|
||||
if (chanlist) {
|
||||
@@ -169,7 +170,7 @@ static PyObject *py_cleanup(PyObject *self, PyObject *args, PyObject *kwargs)
|
||||
|
||||
if (get_gpio_number(channel, &gpio))
|
||||
return NULL;
|
||||
- cleanup_one();
|
||||
+ found = cleanup_one(gpio);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -182,6 +183,37 @@ static PyObject *py_cleanup(PyObject *self, PyObject *args, PyObject *kwargs)
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
+static inline int setup_one(unsigned int *gpio, int channel, int pud, int direction, int initial) {
|
||||
+ if (get_gpio_number(channel, gpio))
|
||||
+ return 0;
|
||||
+
|
||||
+ int func = gpio_function(*gpio);
|
||||
+ if (gpio_warnings && // warnings enabled and
|
||||
+ ((func != 0 && func != 1) || // (already one of the alt functions or
|
||||
+ (gpio_direction[*gpio] == -1 && func == 1))) // already an output not set from this program)
|
||||
+ {
|
||||
+ PyErr_WarnEx(NULL, "This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.", 1);
|
||||
+ }
|
||||
+
|
||||
+ // warn about pull/up down on i2c channels
|
||||
+ if (gpio_warnings) {
|
||||
+ if (rpiinfo.p1_revision == 0) { // compute module - do nothing
|
||||
+ } else if ((rpiinfo.p1_revision == 1 && (*gpio == 0 || *gpio == 1)) ||
|
||||
+ (*gpio == 2 || *gpio == 3)) {
|
||||
+ if (pud == PUD_UP || pud == PUD_DOWN)
|
||||
+ PyErr_WarnEx(NULL, "A physical pull up resistor is fitted on this channel!", 1);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (direction == OUTPUT && (initial == LOW || initial == HIGH)) {
|
||||
+ output_gpio(*gpio, initial);
|
||||
+ }
|
||||
+ setup_gpio(*gpio, direction, pud);
|
||||
+ gpio_direction[*gpio] = direction;
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+
|
||||
// python function setup(channel(s), direction, pull_up_down=PUD_OFF, initial=None)
|
||||
static PyObject *py_setup_channel(PyObject *self, PyObject *args, PyObject *kwargs)
|
||||
{
|
||||
@@ -195,37 +227,6 @@ static PyObject *py_setup_channel(PyObject *self, PyObject *args, PyObject *kwar
|
||||
int pud = PUD_OFF + PY_PUD_CONST_OFFSET;
|
||||
int initial = -1;
|
||||
static char *kwlist[] = {"channel", "direction", "pull_up_down", "initial", NULL};
|
||||
- int func;
|
||||
-
|
||||
- int setup_one(void) {
|
||||
- if (get_gpio_number(channel, &gpio))
|
||||
- return 0;
|
||||
-
|
||||
- func = gpio_function(gpio);
|
||||
- if (gpio_warnings && // warnings enabled and
|
||||
- ((func != 0 && func != 1) || // (already one of the alt functions or
|
||||
- (gpio_direction[gpio] == -1 && func == 1))) // already an output not set from this program)
|
||||
- {
|
||||
- PyErr_WarnEx(NULL, "This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.", 1);
|
||||
- }
|
||||
-
|
||||
- // warn about pull/up down on i2c channels
|
||||
- if (gpio_warnings) {
|
||||
- if (rpiinfo.p1_revision == 0) { // compute module - do nothing
|
||||
- } else if ((rpiinfo.p1_revision == 1 && (gpio == 0 || gpio == 1)) ||
|
||||
- (gpio == 2 || gpio == 3)) {
|
||||
- if (pud == PUD_UP || pud == PUD_DOWN)
|
||||
- PyErr_WarnEx(NULL, "A physical pull up resistor is fitted on this channel!", 1);
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- if (direction == OUTPUT && (initial == LOW || initial == HIGH)) {
|
||||
- output_gpio(gpio, initial);
|
||||
- }
|
||||
- setup_gpio(gpio, direction, pud);
|
||||
- gpio_direction[gpio] = direction;
|
||||
- return 1;
|
||||
- }
|
||||
|
||||
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Oi|ii", kwlist, &chanlist, &direction, &pud, &initial))
|
||||
return NULL;
|
||||
@@ -290,7 +291,7 @@ static PyObject *py_setup_channel(PyObject *self, PyObject *args, PyObject *kwar
|
||||
} else if (chantuple) {
|
||||
chancount = PyTuple_Size(chantuple);
|
||||
} else {
|
||||
- if (!setup_one())
|
||||
+ if (!setup_one(&gpio, channel, pud, direction, initial))
|
||||
return NULL;
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
@@ -320,12 +321,29 @@ static PyObject *py_setup_channel(PyObject *self, PyObject *args, PyObject *kwar
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- if (!setup_one())
|
||||
+ if (!setup_one(&gpio, channel, pud, direction, initial))
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
+static inline int output_val(unsigned int *gpio, int channel, int value) {
|
||||
+ if (get_gpio_number(channel, gpio))
|
||||
+ return 0;
|
||||
+
|
||||
+ if (gpio_direction[*gpio] != OUTPUT)
|
||||
+ {
|
||||
+ PyErr_SetString(PyExc_RuntimeError, "The GPIO channel has not been set up as an OUTPUT");
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ if (check_gpio_priv())
|
||||
+ return 0;
|
||||
+
|
||||
+ output_gpio(*gpio, value);
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
|
||||
// python function output(channel(s), value(s))
|
||||
static PyObject *py_output_gpio(PyObject *self, PyObject *args)
|
||||
@@ -342,23 +360,6 @@ static PyObject *py_output_gpio(PyObject *self, PyObject *args)
|
||||
int chancount = -1;
|
||||
int valuecount = -1;
|
||||
|
||||
- int output(void) {
|
||||
- if (get_gpio_number(channel, &gpio))
|
||||
- return 0;
|
||||
-
|
||||
- if (gpio_direction[gpio] != OUTPUT)
|
||||
- {
|
||||
- PyErr_SetString(PyExc_RuntimeError, "The GPIO channel has not been set up as an OUTPUT");
|
||||
- return 0;
|
||||
- }
|
||||
-
|
||||
- if (check_gpio_priv())
|
||||
- return 0;
|
||||
-
|
||||
- output_gpio(gpio, value);
|
||||
- return 1;
|
||||
- }
|
||||
-
|
||||
if (!PyArg_ParseTuple(args, "OO", &chanlist, &valuelist))
|
||||
return NULL;
|
||||
|
||||
@@ -416,7 +417,7 @@ static PyObject *py_output_gpio(PyObject *self, PyObject *args)
|
||||
}
|
||||
|
||||
if (chancount == -1) {
|
||||
- if (!output())
|
||||
+ if (!output_val(&gpio, channel, value))
|
||||
return NULL;
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
@@ -472,7 +473,7 @@ static PyObject *py_output_gpio(PyObject *self, PyObject *args)
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
- if (!output())
|
||||
+ if (!output_val(&gpio, channel, value))
|
||||
return NULL;
|
||||
}
|
||||
|
||||
--
|
||||
2.7.0
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
From c86bfacc98d58244f532626954ed00d84ecfa82d Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Sat, 30 Jan 2016 17:12:37 -0800
|
||||
Subject: [PATCH] include sys/types.h explicitly for getting caddr_t definition
|
||||
|
||||
Helps fixing build on musl where sys/types.h is not included indirectly
|
||||
as happening on glibc
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
Upstream-Status: Submitted
|
||||
|
||||
source/c_gpio/c_gpio.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/source/c_gpio/c_gpio.c b/source/c_gpio/c_gpio.c
|
||||
index 25a04ca..70df632 100644
|
||||
--- a/source/c_gpio/c_gpio.c
|
||||
+++ b/source/c_gpio/c_gpio.c
|
||||
@@ -29,6 +29,7 @@
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <fcntl.h>
|
||||
+#include <sys/types.h>
|
||||
#include <sys/mman.h>
|
||||
#include "c_gpio.h"
|
||||
|
||||
--
|
||||
2.7.0
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
DESCRIPTION = "Advanced GPIO for the Raspberry Pi. Extends RPi.GPIO with PWM, \
|
||||
GPIO interrups, TCP socket interrupts, command line tools and more"
|
||||
HOMEPAGE = "https://github.com/metachris/RPIO"
|
||||
SECTION = "devel/python"
|
||||
LICENSE = "LGPLv3+"
|
||||
LIC_FILES_CHKSUM = "file://README.rst;beginline=41;endline=53;md5=d5d95d7486a4d98c999675c23196b25a"
|
||||
|
||||
SRCNAME = "RPIO"
|
||||
|
||||
SRC_URI = "http://pypi.python.org/packages/source/R/RPIO/${SRCNAME}-${PV}.tar.gz \
|
||||
file://0001-include-sys-types.h-explicitly-for-getting-caddr_t-d.patch \
|
||||
"
|
||||
S = "${WORKDIR}/${SRCNAME}-${PV}"
|
||||
|
||||
inherit setuptools
|
||||
|
||||
COMPATIBLE_MACHINE = "raspberrypi"
|
||||
|
||||
RDEPENDS_${PN} = "\
|
||||
python-logging \
|
||||
python-threading \
|
||||
"
|
||||
|
||||
SRC_URI[md5sum] = "cefc45422833dcafcd59b78dffc540f4"
|
||||
SRC_URI[sha256sum] = "b89f75dec9de354681209ebfaedfe22b7c178aacd91a604a7bd6d92024e4cf7e"
|
||||
@@ -1,413 +0,0 @@
|
||||
From ca25788e2563bad0d554deb9f4300d1e7d062825 Mon Sep 17 00:00:00 2001
|
||||
From: Aurelian Zanoschi <aurelian17@gmail.com>
|
||||
Date: Mon, 31 Jul 2017 20:25:15 +0300
|
||||
Subject: [PATCH] Add initial cross compile support
|
||||
|
||||
---
|
||||
devLib/Makefile | 54 +++++++++++++++++++++++++--------------------
|
||||
examples/Gertboard/Makefile | 22 +++++++++++-------
|
||||
examples/Makefile | 22 +++++++++++-------
|
||||
examples/PiFace/Makefile | 22 +++++++++++-------
|
||||
examples/PiGlow/Makefile | 4 ++--
|
||||
examples/q2w/Makefile | 4 ++--
|
||||
gpio/Makefile | 29 ++++++++++++------------
|
||||
wiringPi/Makefile | 52 ++++++++++++++++++++++++-------------------
|
||||
8 files changed, 120 insertions(+), 89 deletions(-)
|
||||
|
||||
diff --git a/devLib/Makefile b/devLib/Makefile
|
||||
index cf665d6..040c03a 100644
|
||||
--- a/devLib/Makefile
|
||||
+++ b/devLib/Makefile
|
||||
@@ -31,15 +31,19 @@ ifneq ($V,1)
|
||||
Q ?= @
|
||||
endif
|
||||
|
||||
-STATIC=libwiringPiDev.a
|
||||
-DYNAMIC=libwiringPiDev.so.$(VERSION)
|
||||
+INCLUDE_DIR?=$(DESTDIR)$(PREFIX)/include
|
||||
+LIB_DIR?=$(DESTDIR)$(PREFIX)/lib
|
||||
|
||||
-#DEBUG = -g -O0
|
||||
-DEBUG = -O2
|
||||
-CC = gcc
|
||||
-INCLUDE = -I.
|
||||
-DEFS = -D_GNU_SOURCE
|
||||
-CFLAGS = $(DEBUG) $(DEFS) -Wformat=2 -Wall -Winline $(INCLUDE) -pipe -fPIC
|
||||
+BASE_NAME=libwiringPiDev
|
||||
+STATIC=$(BASE_NAME).a
|
||||
+DYNAMIC=$(BASE_NAME).so.$(VERSION)
|
||||
+
|
||||
+#DEBUG ?= -g -O0
|
||||
+DEBUG ?= -O2
|
||||
+CC ?= gcc
|
||||
+INCLUDE ?= -I.
|
||||
+DEFS ?= -D_GNU_SOURCE
|
||||
+CFLAGS ?= $(DEBUG) $(DEFS) -Wformat=2 -Wall -Winline $(INCLUDE) -pipe -fPIC
|
||||
|
||||
LIBS =
|
||||
|
||||
@@ -68,16 +72,16 @@ $(STATIC): $(OBJ)
|
||||
|
||||
$(DYNAMIC): $(OBJ)
|
||||
$Q echo "[Link (Dynamic)]"
|
||||
- $Q $(CC) -shared -Wl,-soname,libwiringPiDev.so$(WIRINGPI_SONAME_SUFFIX) -o libwiringPiDev.so.$(VERSION) -lpthread $(OBJ)
|
||||
+ $Q $(CC) -shared $(LDFLAGS) -Wl,-soname,$(BASE_NAME).so.$(DYN_VERS_MAJ) -o $(BASE_NAME).so -lpthread $(OBJ)
|
||||
|
||||
.c.o:
|
||||
$Q echo [Compile] $<
|
||||
- $Q $(CC) -c $(CFLAGS) $< -o $@
|
||||
+ $Q $(CC) -c $(CFLAGS) -fPIC $< -o $@
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
$Q echo "[Clean]"
|
||||
- $Q rm -f $(OBJ) $(OBJ_I2C) *~ core tags Makefile.bak libwiringPiDev.*
|
||||
+ $Q rm -f $(OBJ) $(OBJ_I2C) *~ core tags Makefile.bak $(BASE_NAME).so* $(BASE_NAME).a
|
||||
|
||||
.PHONY: tags
|
||||
tags: $(SRC)
|
||||
@@ -88,22 +92,22 @@ tags: $(SRC)
|
||||
.PHONY: install
|
||||
install: $(DYNAMIC)
|
||||
$Q echo "[Install Headers]"
|
||||
- $Q install -m 0755 -d $(DESTDIR)$(PREFIX)/include
|
||||
- $Q install -m 0644 $(HEADERS) $(DESTDIR)$(PREFIX)/include
|
||||
+ $Q install -m 0755 -d $(INCLUDE_DIR)
|
||||
+ $Q install -m 0644 $(HEADERS) $(INCLUDE_DIR)
|
||||
$Q echo "[Install Dynamic Lib]"
|
||||
- $Q install -m 0755 -d $(DESTDIR)$(PREFIX)/lib
|
||||
- $Q install -m 0755 libwiringPiDev.so.$(VERSION) $(DESTDIR)$(PREFIX)/lib/libwiringPiDev.so.$(VERSION)
|
||||
- $Q ln -sf $(DESTDIR)$(PREFIX)/lib/libwiringPiDev.so.$(VERSION) $(DESTDIR)/lib/libwiringPiDev.so
|
||||
- $Q $(LDCONFIG)
|
||||
+ $Q install -m 0755 -d $(LIB_DIR)
|
||||
+ $Q install -m 0755 $(BASE_NAME).so $(LIB_DIR)/$(DYNAMIC)
|
||||
+ $Q ln -sf $(DYNAMIC) $(LIB_DIR)/$(BASE_NAME).so
|
||||
+ $Q ln -sf $(DYNAMIC) $(LIB_DIR)/$(BASE_NAME).so.$(DYN_VERS_MAJ)
|
||||
|
||||
.PHONY: install-static
|
||||
install-static: $(STATIC)
|
||||
$Q echo "[Install Headers]"
|
||||
- $Q install -m 0755 -d $(DESTDIR)$(PREFIX)/include
|
||||
- $Q install -m 0644 $(HEADERS) $(DESTDIR)$(PREFIX)/include
|
||||
+ $Q install -m 0755 -d $(INCLUDE_DIR)
|
||||
+ $Q install -m 0644 $(HEADERS) $(INCLUDE_DIR)
|
||||
$Q echo "[Install Static Lib]"
|
||||
- $Q install -m 0755 -d $(DESTDIR)$(PREFIX)/lib
|
||||
- $Q install -m 0755 libwiringPiDev.a $(DESTDIR)$(PREFIX)/lib
|
||||
+ $Q install -m 0755 -d $(LIB_DIR)
|
||||
+ $Q install -m 0755 $(STATIC) $(LIB_DIR)
|
||||
|
||||
.PHONY: install-deb
|
||||
install-deb: $(DYNAMIC)
|
||||
@@ -118,9 +122,11 @@ install-deb: $(DYNAMIC)
|
||||
.PHONY: uninstall
|
||||
uninstall:
|
||||
$Q echo "[UnInstall]"
|
||||
- $Q cd $(DESTDIR)$(PREFIX)/include/ && rm -f $(HEADERS)
|
||||
- $Q cd $(DESTDIR)$(PREFIX)/lib/ && rm -f libwiringPiDev.*
|
||||
- $Q $(LDCONFIG)
|
||||
+ $Q cd $(INCLUDE_DIR) && rm -f $(HEADERS)
|
||||
+ $Q rm -f $(LIB_DIR)/$(STATIC)
|
||||
+ $Q rm -f $(LIB_DIR)/$(DYNAMIC)
|
||||
+ $Q rm -f $(LIB_DIR)/$(BASE_NAME).so
|
||||
+ $Q rm -f $(LIB_DIR)/$(BASE_NAME).so.$(DYN_VERS_MAJ)
|
||||
|
||||
|
||||
.PHONY: depend
|
||||
diff --git a/examples/Gertboard/Makefile b/examples/Gertboard/Makefile
|
||||
index 1939ad6..98d1415 100644
|
||||
--- a/examples/Gertboard/Makefile
|
||||
+++ b/examples/Gertboard/Makefile
|
||||
@@ -9,14 +9,20 @@ ifneq ($V,1)
|
||||
Q ?= @
|
||||
endif
|
||||
|
||||
-#DEBUG = -g -O0
|
||||
-DEBUG = -O3
|
||||
-CC = gcc
|
||||
-INCLUDE = -I/usr/local/include
|
||||
-CFLAGS = $(DEBUG) -Wall $(INCLUDE) -Winline -pipe
|
||||
-
|
||||
-LDFLAGS = -L/usr/local/lib
|
||||
-LDLIBS = -lwiringPi -lwiringPiDev -lpthread -lm
|
||||
+DESTDIR?=/usr
|
||||
+PREFIX?=/local
|
||||
+
|
||||
+INCLUDE_DIR?=$(DESTDIR)$(PREFIX)/include
|
||||
+LIB_DIR?=$(DESTDIR)$(PREFIX)/lib
|
||||
+
|
||||
+#DEBUG ?= -g -O0
|
||||
+DEBUG ?= -O3
|
||||
+CC ?= gcc
|
||||
+INCLUDE ?= -I$(INCLUDE_DIR)
|
||||
+CFLAGS ?= $(DEBUG) -Wall $(INCLUDE) -Winline -pipe
|
||||
+
|
||||
+LDFLAGS ?= -L$(LIB_DIR)
|
||||
+LDLIBS ?= -lwiringPi -lwiringPiDev -lpthread -lm
|
||||
|
||||
# Should not alter anything below this line
|
||||
###############################################################################
|
||||
diff --git a/examples/Makefile b/examples/Makefile
|
||||
index 6d87885..8623816 100644
|
||||
--- a/examples/Makefile
|
||||
+++ b/examples/Makefile
|
||||
@@ -26,14 +26,20 @@ ifneq ($V,1)
|
||||
Q ?= @
|
||||
endif
|
||||
|
||||
-#DEBUG = -g -O0
|
||||
-DEBUG = -O3
|
||||
-CC = gcc
|
||||
-INCLUDE = -I/usr/local/include
|
||||
-CFLAGS = $(DEBUG) -Wall $(INCLUDE) -Winline -pipe
|
||||
-
|
||||
-LDFLAGS = -L/usr/local/lib
|
||||
-LDLIBS = -lwiringPi -lwiringPiDev -lpthread -lm -lcrypt -lrt
|
||||
+DESTDIR?=/usr
|
||||
+PREFIX?=/local
|
||||
+
|
||||
+INCLUDE_DIR?=$(DESTDIR)$(PREFIX)/include
|
||||
+LIB_DIR?=$(DESTDIR)$(PREFIX)/lib
|
||||
+
|
||||
+#DEBUG ?= -g -O0
|
||||
+DEBUG ?= -O3
|
||||
+CC ?= gcc
|
||||
+INCLUDE ?= -I$(INCLUDE_DIR)
|
||||
+CFLAGS ?= $(DEBUG) -Wall $(INCLUDE) -Winline -pipe
|
||||
+
|
||||
+LDFLAGS ?= -L$(LIB_DIR)
|
||||
+LDLIBS ?= -lwiringPi -lwiringPiDev -lpthread -lm -lcrypt -lrt
|
||||
|
||||
# Should not alter anything below this line
|
||||
###############################################################################
|
||||
diff --git a/examples/PiFace/Makefile b/examples/PiFace/Makefile
|
||||
index f937c14..ad030b3 100644
|
||||
--- a/examples/PiFace/Makefile
|
||||
+++ b/examples/PiFace/Makefile
|
||||
@@ -26,14 +26,20 @@ ifneq ($V,1)
|
||||
Q ?= @
|
||||
endif
|
||||
|
||||
-#DEBUG = -g -O0
|
||||
-DEBUG = -O3
|
||||
-CC = gcc
|
||||
-INCLUDE = -I/usr/local/include
|
||||
-CFLAGS = $(DEBUG) -Wall $(INCLUDE) -Winline -pipe
|
||||
-
|
||||
-LDFLAGS = -L/usr/local/lib
|
||||
-LDLIBS = -lwiringPi -lwiringPiDev -lpthread -lm
|
||||
+DESTDIR?=/usr
|
||||
+PREFIX?=/local
|
||||
+
|
||||
+INCLUDE_DIR?=$(DESTDIR)$(PREFIX)/include
|
||||
+LIB_DIR?=$(DESTDIR)$(PREFIX)/lib
|
||||
+
|
||||
+#DEBUG ?= -g -O0
|
||||
+DEBUG ?= -O3
|
||||
+CC ?= gcc
|
||||
+INCLUDE ?= -I$(INCLUDE_DIR)
|
||||
+CFLAGS ?= $(DEBUG) -Wall $(INCLUDE) -Winline -pipe
|
||||
+
|
||||
+LDFLAGS ?= -L$(LIB_DIR)
|
||||
+LDLIBS ?= -lwiringPi -lwiringPiDev -lpthread -lm
|
||||
|
||||
# Should not alter anything below this line
|
||||
###############################################################################
|
||||
diff --git a/examples/PiGlow/Makefile b/examples/PiGlow/Makefile
|
||||
index f182db7..d1ea74f 100644
|
||||
--- a/examples/PiGlow/Makefile
|
||||
+++ b/examples/PiGlow/Makefile
|
||||
@@ -29,10 +29,10 @@ endif
|
||||
#DEBUG = -g -O0
|
||||
DEBUG = -O3
|
||||
CC = gcc
|
||||
-INCLUDE = -I/usr/local/include
|
||||
+INCLUDE = -I../wiringPi -I../wiringPiDev
|
||||
CFLAGS = $(DEBUG) -Wall $(INCLUDE) -Winline -pipe
|
||||
|
||||
-LDFLAGS = -L/usr/local/lib
|
||||
+LDFLAGS = -L../wiringPi -L../wiringPiDev
|
||||
LDLIBS = -lwiringPi -lwiringPiDev -lpthread -lm
|
||||
|
||||
# Should not alter anything below this line
|
||||
diff --git a/examples/q2w/Makefile b/examples/q2w/Makefile
|
||||
index 8f773bf..14aa6e4 100644
|
||||
--- a/examples/q2w/Makefile
|
||||
+++ b/examples/q2w/Makefile
|
||||
@@ -29,10 +29,10 @@ endif
|
||||
#DEBUG = -g -O0
|
||||
DEBUG = -O3
|
||||
CC = gcc
|
||||
-INCLUDE = -I/usr/local/include
|
||||
+INCLUDE = -I../wiringPi -I../devLib
|
||||
CFLAGS = $(DEBUG) -Wall $(INCLUDE) -Winline -pipe
|
||||
|
||||
-LDFLAGS = -L/usr/local/lib
|
||||
+LDFLAGS = -L../wiringPi -L../devLib
|
||||
LDLIBS = -lwiringPi -lwiringPiDev -lpthread -lm
|
||||
|
||||
###############################################################################
|
||||
diff --git a/gpio/Makefile b/gpio/Makefile
|
||||
index f41a005..22753ee 100644
|
||||
--- a/gpio/Makefile
|
||||
+++ b/gpio/Makefile
|
||||
@@ -30,13 +30,17 @@ ifneq ($V,1)
|
||||
Q ?= @
|
||||
endif
|
||||
|
||||
-#DEBUG = -g -O0
|
||||
-DEBUG = -O2
|
||||
-CC = gcc
|
||||
-INCLUDE = -I$(DESTDIR)$(PREFIX)/include
|
||||
-CFLAGS = $(DEBUG) -Wall -Wextra $(INCLUDE) -Winline -pipe
|
||||
+INCLUDE_DIR?=$(DESTDIR)$(PREFIX)/include
|
||||
+LIB_DIR?=$(DESTDIR)$(PREFIX)/lib
|
||||
+BIN_DIR?=$(DESTDIR)$(PREFIX)/bin
|
||||
|
||||
-LDFLAGS = -L$(DESTDIR)$(PREFIX)/lib
|
||||
+#DEBUG ?= -g -O0
|
||||
+DEBUG ?= -O2
|
||||
+CC ?= gcc
|
||||
+INCLUDE ?= -I$(INCLUDE_DIR)
|
||||
+CFLAGS ?= $(DEBUG) -Wall -Wextra $(INCLUDE) -Winline -pipe
|
||||
+
|
||||
+LDFLAGS ?= -L$(LIB_DIR)
|
||||
LIBS = -lwiringPi -lwiringPiDev -lpthread -lrt -lm -lcrypt
|
||||
|
||||
# May not need to alter anything below this line
|
||||
@@ -72,13 +76,10 @@ tags: $(SRC)
|
||||
.PHONY: install
|
||||
install: gpio
|
||||
$Q echo "[Install]"
|
||||
- $Q cp gpio $(DESTDIR)$(PREFIX)/bin
|
||||
-ifneq ($(WIRINGPI_SUID),0)
|
||||
- $Q chown root.root $(DESTDIR)$(PREFIX)/bin/gpio
|
||||
- $Q chmod 4755 $(DESTDIR)$(PREFIX)/bin/gpio
|
||||
-endif
|
||||
- $Q mkdir -p $(DESTDIR)$(PREFIX)/man/man1
|
||||
- $Q cp gpio.1 $(DESTDIR)$(PREFIX)/man/man1
|
||||
+ $Q install -d $(BIN_DIR)
|
||||
+ $Q install -m 4755 -o root -g root gpio $(BIN_DIR)
|
||||
+ $Q install -d $(DESTDIR)$(PREFIX)/share/man/man1
|
||||
+ $Q install -m 644 -o root -g root gpio.1 $(DESTDIR)$(PREFIX)/share/man/man1
|
||||
|
||||
.PHONY: install-deb
|
||||
install-deb: gpio
|
||||
@@ -91,7 +92,7 @@ install-deb: gpio
|
||||
.PHONY: uninstall
|
||||
uninstall:
|
||||
$Q echo "[UnInstall]"
|
||||
- $Q rm -f $(DESTDIR)$(PREFIX)/bin/gpio
|
||||
+ $Q rm -f $(BIN_DIR)/gpio
|
||||
$Q rm -f $(DESTDIR)$(PREFIX)/man/man1/gpio.1
|
||||
|
||||
.PHONY: depend
|
||||
diff --git a/wiringPi/Makefile b/wiringPi/Makefile
|
||||
index e1868b9..750d290 100644
|
||||
--- a/wiringPi/Makefile
|
||||
+++ b/wiringPi/Makefile
|
||||
@@ -25,21 +25,25 @@ VERSION=$(shell cat ../VERSION)
|
||||
DESTDIR?=/usr
|
||||
PREFIX?=/local
|
||||
|
||||
+INCLUDE_DIR?=$(DESTDIR)$(PREFIX)/include
|
||||
+LIB_DIR?=$(DESTDIR)$(PREFIX)/lib
|
||||
+
|
||||
LDCONFIG?=ldconfig
|
||||
|
||||
ifneq ($V,1)
|
||||
Q ?= @
|
||||
endif
|
||||
|
||||
-STATIC=libwiringPi.a
|
||||
-DYNAMIC=libwiringPi.so.$(VERSION)
|
||||
+BASE_NAME=libwiringPi
|
||||
+STATIC=$(BASE_NAME).a
|
||||
+DYNAMIC=$(BASE_NAME).so.$(VERSION)
|
||||
|
||||
-#DEBUG = -g -O0
|
||||
-DEBUG = -O2
|
||||
-CC = gcc
|
||||
-INCLUDE = -I.
|
||||
+#DEBUG ?= -g -O0
|
||||
+DEBUG ?= -O2
|
||||
+CC ?= gcc
|
||||
+INCLUDE ?= -I.
|
||||
DEFS = -D_GNU_SOURCE
|
||||
-CFLAGS = $(DEBUG) $(DEFS) -Wformat=2 -Wall -Wextra -Winline $(INCLUDE) -pipe -fPIC
|
||||
+CFLAGS = $(DEBUG) $(DEFS) $(INCLUDE) -Wformat=2 -Wall -Wextra -Winline -pipe -fPIC
|
||||
|
||||
LIBS = -lm -lpthread -lrt -lcrypt
|
||||
|
||||
@@ -78,17 +82,17 @@ $(STATIC): $(OBJ)
|
||||
|
||||
$(DYNAMIC): $(OBJ)
|
||||
$Q echo "[Link (Dynamic)]"
|
||||
- $Q $(CC) -shared -Wl,-soname,libwiringPi.so$(WIRINGPI_SONAME_SUFFIX) -o libwiringPi.so.$(VERSION) $(LIBS) $(OBJ)
|
||||
+ $Q $(CC) $(LDFLAGS) -shared -Wl,-soname,$(BASE_NAME).so.$(DYN_VERS_MAJ) -o $(BASE_NAME).so $(OBJ) $(LIBS)
|
||||
|
||||
.c.o:
|
||||
$Q echo [Compile] $<
|
||||
- $Q $(CC) -c $(CFLAGS) $< -o $@
|
||||
+ $Q $(CC) $(CFLAGS) $(LIBS) -c $< -o $@
|
||||
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
$Q echo "[Clean]"
|
||||
- $Q rm -f $(OBJ) $(OBJ_I2C) *~ core tags Makefile.bak libwiringPi.*
|
||||
+ $Q rm -f $(OBJ) $(OBJ_I2C) *~ core tags Makefile.bak $(BASE_NAME).so* $(BASE_NAME).a
|
||||
|
||||
.PHONY: tags
|
||||
tags: $(SRC)
|
||||
@@ -99,22 +103,22 @@ tags: $(SRC)
|
||||
.PHONY: install
|
||||
install: $(DYNAMIC)
|
||||
$Q echo "[Install Headers]"
|
||||
- $Q install -m 0755 -d $(DESTDIR)$(PREFIX)/include
|
||||
- $Q install -m 0644 $(HEADERS) $(DESTDIR)$(PREFIX)/include
|
||||
+ $Q install -m 0755 -d $(INCLUDE_DIR)
|
||||
+ $Q install -m 0644 $(HEADERS) $(INCLUDE_DIR)
|
||||
$Q echo "[Install Dynamic Lib]"
|
||||
- $Q install -m 0755 -d $(DESTDIR)$(PREFIX)/lib
|
||||
- $Q install -m 0755 libwiringPi.so.$(VERSION) $(DESTDIR)$(PREFIX)/lib/libwiringPi.so.$(VERSION)
|
||||
- $Q ln -sf $(DESTDIR)$(PREFIX)/lib/libwiringPi.so.$(VERSION) $(DESTDIR)/lib/libwiringPi.so
|
||||
- $Q $(LDCONFIG)
|
||||
+ $Q install -m 0755 -d $(LIB_DIR)
|
||||
+ $Q install -m 0755 $(BASE_NAME).so $(LIB_DIR)/$(DYNAMIC)
|
||||
+ $Q ln -sf $(DYNAMIC) $(LIB_DIR)/$(BASE_NAME).so
|
||||
+ $Q ln -sf $(DYNAMIC) $(LIB_DIR)/$(BASE_NAME).so.$(DYN_VERS_MAJ)
|
||||
|
||||
.PHONY: install-static
|
||||
install-static: $(STATIC)
|
||||
$Q echo "[Install Headers]"
|
||||
- $Q install -m 0755 -d $(DESTDIR)$(PREFIX)/include
|
||||
- $Q install -m 0644 $(HEADERS) $(DESTDIR)$(PREFIX)/include
|
||||
+ $Q install -m 0755 -d $(INCLUDE_DIR)
|
||||
+ $Q install -m 0644 $(HEADERS) $(INCLUDE_DIR)
|
||||
$Q echo "[Install Static Lib]"
|
||||
- $Q install -m 0755 -d $(DESTDIR)$(PREFIX)/lib
|
||||
- $Q install -m 0755 libwiringPi.a $(DESTDIR)$(PREFIX)/lib
|
||||
+ $Q install -m 0755 -d $(LIB_DIR)
|
||||
+ $Q install -m 0755 $(STATIC) $(LIB_DIR)
|
||||
|
||||
.PHONY: install-deb
|
||||
install-deb: $(DYNAMIC)
|
||||
@@ -129,9 +133,11 @@ install-deb: $(DYNAMIC)
|
||||
.PHONY: uninstall
|
||||
uninstall:
|
||||
$Q echo "[UnInstall]"
|
||||
- $Q cd $(DESTDIR)$(PREFIX)/include/ && rm -f $(HEADERS)
|
||||
- $Q cd $(DESTDIR)$(PREFIX)/lib/ && rm -f libwiringPi.*
|
||||
- $Q $(LDCONFIG)
|
||||
+ $Q cd $(INCLUDE_DIR) && rm -f $(HEADERS)
|
||||
+ $Q rm -f $(LIB_DIR)/$(STATIC)
|
||||
+ $Q rm -f $(LIB_DIR)/$(DYNAMIC)
|
||||
+ $Q rm -f $(LIB_DIR)/$(BASE_NAME).so
|
||||
+ $Q rm -f $(LIB_DIR)/$(BASE_NAME).so.$(DYN_VERS_MAJ)
|
||||
|
||||
|
||||
.PHONY: depend
|
||||
--
|
||||
2.7.4
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
DESCRIPTION = "A library to control Raspberry Pi GPIO channels"
|
||||
HOMEPAGE = "https://projects.drogon.net/raspberry-pi/wiringpi/"
|
||||
SECTION = "devel/libs"
|
||||
LICENSE = "LGPLv3+"
|
||||
LIC_FILES_CHKSUM = "file://COPYING.LESSER;md5=e6a600fd5e1d9cbde2d983680233ad02"
|
||||
|
||||
# tag 2.44
|
||||
SRCREV = "96344ff7125182989f98d3be8d111952a8f74e15"
|
||||
|
||||
S = "${WORKDIR}/git"
|
||||
|
||||
SRC_URI = "git://git.drogon.net/wiringPi \
|
||||
file://0001-Add-initial-cross-compile-support.patch \
|
||||
"
|
||||
|
||||
COMPATIBLE_MACHINE = "raspberrypi"
|
||||
|
||||
CFLAGS_prepend = "-I${S}/wiringPi -I${S}/devLib "
|
||||
|
||||
EXTRA_OEMAKE += "'INCLUDE_DIR=${D}${includedir}' 'LIB_DIR=${D}${libdir}'"
|
||||
EXTRA_OEMAKE += "'DESTDIR=${D}/usr' 'PREFIX=""'"
|
||||
|
||||
do_compile() {
|
||||
oe_runmake -C devLib
|
||||
oe_runmake -C wiringPi
|
||||
oe_runmake -C gpio 'LDFLAGS=${LDFLAGS} -L${S}/wiringPi -L${S}/devLib'
|
||||
}
|
||||
|
||||
do_install() {
|
||||
oe_runmake -C devLib install
|
||||
oe_runmake -C wiringPi install
|
||||
oe_runmake -C gpio install
|
||||
}
|
||||
37
recipes-extra/startup/rpi-first-run-wizard.bb
Normal file
37
recipes-extra/startup/rpi-first-run-wizard.bb
Normal file
@@ -0,0 +1,37 @@
|
||||
DESCRIPTION = "Scripts to support a first run wizard on the Raspberry Pi."
|
||||
LICENSE = "GPLV2"
|
||||
LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263"
|
||||
|
||||
DEPENDS = "zenity dbus"
|
||||
RDEPENDS = "slim sudo zenity dbus"
|
||||
|
||||
COMPATIBLE_MACHINE = "raspberrypi"
|
||||
|
||||
PR = "r1"
|
||||
|
||||
SRC_URI = " \
|
||||
file://LICENSE \
|
||||
file://first-run-wizard.sh \
|
||||
file://rpi_startup.sh \
|
||||
file://rc.firstrun \
|
||||
"
|
||||
|
||||
inherit update-rc.d
|
||||
|
||||
INITSCRIPT_NAME = "rpi-run-init"
|
||||
INITSCRIPT_PARAMS = "start 29 2 3 4 5 . stop 29 2 3 4 5 ."
|
||||
|
||||
do_install() {
|
||||
install -d ${D}${prefix}/rpi/scripts/
|
||||
install -m 0755 ${WORKDIR}/first-run-wizard.sh ${D}${prefix}/rpi/scripts/
|
||||
install -m 0755 ${WORKDIR}/rpi_startup.sh ${D}${prefix}/rpi/scripts/
|
||||
|
||||
install -d ${D}${sysconfdir}/init.d/
|
||||
install -m 0755 ${WORKDIR}/rc.firstrun ${D}${sysconfdir}/init.d/rpi-run-init
|
||||
|
||||
install -d ${D}${sysconfdir}/rpi/
|
||||
}
|
||||
|
||||
PACKAGE_ARCH = "${MACHINE_ARCH}"
|
||||
|
||||
FILES_${PN} += "${prefix} ${sysconfdir}"
|
||||
339
recipes-extra/startup/rpi-first-run-wizard/LICENSE
Normal file
339
recipes-extra/startup/rpi-first-run-wizard/LICENSE
Normal file
@@ -0,0 +1,339 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Lesser General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License.
|
||||
213
recipes-extra/startup/rpi-first-run-wizard/first-run-wizard.sh
Normal file
213
recipes-extra/startup/rpi-first-run-wizard/first-run-wizard.sh
Normal file
@@ -0,0 +1,213 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Initially based on the scripts by JohnX/Mer Project - http://wiki.maemo.org/Mer/
|
||||
# Reworked for the OpenPandora - John Willis/Michael Mrozek
|
||||
# Quickly 'hacked' for the Raspberry Pi to provide a simple 1st boot wizard.
|
||||
|
||||
# You can start the wizard from the shell using 'xinit ./first-boot-init.sh'
|
||||
|
||||
export LANG=en_GB.UTF-8
|
||||
export GTK2_RC_FILES=/usr/share/themes/Xfce/gtk-2.0/gtkrc
|
||||
|
||||
# Ensure there is a wheel group for sudoers to be put into.
|
||||
# TODO: Do this somewhere better.
|
||||
groupadd wheel
|
||||
|
||||
# Default error message (should a user hit cancel, validation fail etc.).
|
||||
ERROR_WINDOW='zenity --title="Error" --error --text="Sorry! Please try again." --timeout 6'
|
||||
|
||||
RESET_ROOT="yes"
|
||||
|
||||
DISPLAY=:0 xset s off
|
||||
|
||||
# Greet the user.
|
||||
|
||||
if zenity --question --title="Pandoras Box has been opened." --text="Welcome!\n\nPandora's Box has been opened.\n\nThis wizard will help you setting up your new OpenPandora handheld before the first use.\n\nYou will be asked a few simple questions to personalise and configure your device.\n\nDo you want to set up your unit now or shut the unit down and do it later?" --ok-label="Start now" --cancel-label="Shutdown" ; then
|
||||
# ----
|
||||
|
||||
# Reset ROOT's password to something random
|
||||
|
||||
# (I know the image build sets the password to something pusdo-random)
|
||||
# (ok, urandom is not 100% secure but it's good enough for our needs)
|
||||
|
||||
if [ $RESET_ROOT == "yes" ]; then
|
||||
rootpwd=$(cat /dev/urandom|tr -dc "a-zA-Z0-9-_\$\?"|fold -w 30|head -n 1)
|
||||
passwd "root" <<EOF
|
||||
$rootpwd
|
||||
$rootpwd
|
||||
EOF
|
||||
rootpwd=""
|
||||
fi
|
||||
|
||||
# ----
|
||||
|
||||
# Setup swap partition if the user has placed an SD with a swap partition on it.
|
||||
|
||||
swap_part=$(sfdisk -l /dev/mmcblk? | grep swap | cut -d" " -f1)
|
||||
if [ x$swap_part != x ] ; then
|
||||
use_swap=$(zenity --title="Enable swap?" --text "Swap partition found on SD card. Would you like to use it?\n\nWarning: This SD must remain in the system to use the swap." --list --radiolist --column " " --column "Answer" TRUE "Use swap on $swap_part" FALSE "Do not use swap")
|
||||
if [ "$use_swap" = "Use swap on $swap_part" ] ; then
|
||||
swapon $swap_part
|
||||
echo "$swap_part none swap sw 0 0" >> /etc/fstab
|
||||
fi
|
||||
fi
|
||||
|
||||
# ----
|
||||
|
||||
# Setup the full name and username.
|
||||
|
||||
while ! name=$(zenity --title="Please enter your full name" --entry --text "Please enter your full name.") || [ "x$name" = "x" ] ; do
|
||||
zenity --title="Error" --error --text="Please try again." --timeout 6
|
||||
done
|
||||
|
||||
username_guess=$(echo "$name" | cut -d" " -f1 | tr A-Z a-z)
|
||||
|
||||
while ! username=$(zenity --title="Enter your username" --entry --text "Please choose a short username.\n\nIt should be all lowercase and contain only letters and numbers." --entry-text "$username_guess") || [ "x$username" = "x" ] ; do
|
||||
zenity --title="Error" --error --text="Please try again." --timeout 6
|
||||
done
|
||||
|
||||
while ! useradd -c "$name,,," -G adm,audio,video,netdev,wheel,plugdev,users "$username" ; do
|
||||
username=$(zenity --title="Please check username" --entry --text "Please ensure that your username consists of only\nletters and numbers and is not already in use on the system." --entry-text "$username")
|
||||
done
|
||||
|
||||
# ----
|
||||
|
||||
# Setup the users password.
|
||||
|
||||
password=""
|
||||
while [ x$password = x ] ; do
|
||||
password1=$(zenity --title=Password --entry --text="Please choose a new password." --hide-text)
|
||||
password2=$(zenity --title=Confirm --entry --text="Confirm your new password." --hide-text)
|
||||
if [ $password1 != $password2 ] ; then
|
||||
zenity --title="Error" --error --text="The passwords do not match.\n\nPlease try again." --timeout 6
|
||||
else
|
||||
if [ x$password1 = x ] ; then
|
||||
zenity --title="Error" --error --text="Password cannot be blank!\n\nPlease try again." --timeout 6
|
||||
else
|
||||
password=$password1
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
passwd "$username" <<EOF
|
||||
$password
|
||||
$password
|
||||
EOF
|
||||
|
||||
# ----
|
||||
|
||||
# Pick a name for the OpenPandora.
|
||||
|
||||
while ! hostname=$(zenity --title="Name your Pandora" --entry --text "Please choose a name for your OpenPandora.\n\nIt should only contain letters, numbers and dashes, no spaces." --entry-text "$username-openpandora") || [ "x$hostname" = "x" ]; do
|
||||
zenity --title="Error" --error --text="Please try again."
|
||||
done
|
||||
|
||||
|
||||
echo $hostname > /etc/hostname
|
||||
hostname =$(sed 's/ /_/g' /etc/hostname)
|
||||
echo $hostname > /etc/hostname
|
||||
echo "127.0.0.1 localhost.localdomain localhost $hostname" > /etc/hosts
|
||||
hostname -F /etc/hostname
|
||||
|
||||
# Set the correct user for Autologin and enable / disable it.
|
||||
|
||||
if zenity --question --title="Autologin" --text="Do you wish to automatically login at startup?\n\nSecurity warning: This skips the password check on startup" --ok-label="Yes" --cancel-label="No"; then
|
||||
# echo "PREFERED_USER=$username" > /etc/default/autologin
|
||||
sed -i "s/.*default_user.*/default_user $username/g" /etc/slim.conf
|
||||
sed -i 's/.*auto_login.*/auto_login yes/g' /etc/slim.conf
|
||||
else
|
||||
if zenity --question --title="User" --text="Do you wish to have your username automatically populated in the login screen?\n\nNote: This is ideal if you're the only user of the OpenPandora but wish to disable autologin and use a password." --ok-label="Yes" --cancel-label="No"; then
|
||||
sed -i "s/.*default_user.*/default_user $username/g" /etc/slim.conf
|
||||
sed -i 's/.*auto_login.*/auto_login no/g' /etc/slim.conf
|
||||
else
|
||||
sed -i "s/.*default_user.*/default_user/g" /etc/slim.conf
|
||||
sed -i 's/.*auto_login.*/auto_login no/g' /etc/slim.conf
|
||||
fi
|
||||
fi
|
||||
|
||||
# ----
|
||||
|
||||
# Select the default interface and setup SLiM to pass that as a sesion to ~./.xinitrc
|
||||
|
||||
selection=""
|
||||
while [ x$selection = x ]; do
|
||||
selection=$(cat /etc/pandora/conf/gui.conf | awk -F\; '{print $1 "\n" $2 }' | zenity --width=500 --height=300 --title="Select the Default GUI" --list --column "Name" --column "Description" --text "Please select the Default GUI" )
|
||||
if [ x$selection = x ]; then
|
||||
zenity --title="Error" --error --text="Please select a GUI." --timeout=6
|
||||
fi
|
||||
done
|
||||
|
||||
echo $selection
|
||||
|
||||
gui=$(grep $selection /etc/pandora/conf/gui.conf | awk -F\; '{print $3}')
|
||||
stopcommand=$(grep $selection /etc/pandora/conf/gui.conf | awk -F\; '{print $4}')
|
||||
|
||||
echo $gui
|
||||
|
||||
if [ $gui ]; then
|
||||
sed -i "s/.*DEFAULT_SESSION=.*/DEFAULT_SESSION=$gui/g" /home/$username/.xinitrc
|
||||
echo $selection selected as default interface
|
||||
zenity --info --title="Selected session" --text "You selected $selection as default setting. You can always change your default GUI later." --timeout 6
|
||||
else
|
||||
sed -i 's/.*DEFAULT_SESSION=.*/DEFAULT_SESSION=startxfce4/g' /home/$username/.xinitrc
|
||||
fi
|
||||
|
||||
# ----
|
||||
|
||||
# Set the timezone and date/time
|
||||
|
||||
while ! area=$(zenity --list --title "Select your time zone" --text="Please select your area" --column="Select your area" --print-column=1 "Africa" "America" "Asia" "Australia" "Europe" "Pacific" --width=500 --height=260) || [ "x$area" = "x" ] ; do
|
||||
zenity --title="Error" --error --text="Please select your area." --timeout=6
|
||||
done
|
||||
|
||||
while ! timezone=$(ls -1 /usr/share/zoneinfo/$area | zenity ---width=500 --height=200 --title="Select your closest location" --list --column "Closest Location" --text "Please select the location closest to you") || [ "x$timezone" = "x" ] ; do
|
||||
zenity --title="Error" --error --text="Please select your location." --timeout=6
|
||||
done
|
||||
|
||||
echo $timezone
|
||||
rm /etc/localtime && ln -s /usr/share/zoneinfo/$area/$timezone /etc/localtime
|
||||
|
||||
# Make sure we clean up any leading zeros in the day (as Zenity freaks out)
|
||||
date_d=`date +%d | sed 's/^0//'`
|
||||
date_m=`date +%m | sed 's/^0//'`
|
||||
date_y=`date +%Y`
|
||||
|
||||
while ! date=$(zenity --calendar --text="Please select the current date" --title "Please select the current date" --day=$date_d --month=$date_m --year=$date_y --date-format="%Y%m%d" --width=500) || [ "x$date" = "x" ] ; do
|
||||
zenity --title="Error" --error --text="Please select the date." --timeout 6
|
||||
done
|
||||
|
||||
echo $date
|
||||
|
||||
time_h=`date +%H`
|
||||
time_m=`date +%M`
|
||||
|
||||
while ! time=$(zenity --title="Enter actual time" --entry --text "Please enter the time in 24hour format (HH:MM):" --entry-text "$time_h:$time_m") || [ "x$time" = "x" ] ; do
|
||||
zenity --title="Error" --error --text="Please input the time." --timeout 6
|
||||
done
|
||||
|
||||
while ! date -d $time ; do
|
||||
time=$(zenity --title="Enter actual time" --entry --text "Please enter the time in 24hour format (HH:MM):" --entry-text "$time_h:$time_m")
|
||||
done
|
||||
|
||||
date +%Y%m%d -s $date
|
||||
date +%H:%M -s $time
|
||||
|
||||
# ----
|
||||
|
||||
# Finsh up and boot the system.
|
||||
|
||||
zenity --info --title="Finished" --text "This concludes the First Boot Wizard.\n\nYour chosen interface will start in a few seconds\n\nThankyou for buying the OpenPandora. Enjoy using the device!" --timeout 6
|
||||
|
||||
# ----
|
||||
|
||||
# Write the control file so this script is not run on next boot
|
||||
# (hackish I know but I want the flexability to drop a new script in later esp. in the early firmwares).
|
||||
|
||||
touch /etc/rpi/first-boot
|
||||
# Make the control file writeable by all to allow the user to delete to rerun the wizard on next boot.
|
||||
chmod 0666 /etc/rpi/first-boot
|
||||
|
||||
# ----
|
||||
else
|
||||
poweroff
|
||||
fi
|
||||
73
recipes-extra/startup/rpi-first-run-wizard/rc.firstrun
Normal file
73
recipes-extra/startup/rpi-first-run-wizard/rc.firstrun
Normal file
@@ -0,0 +1,73 @@
|
||||
#!/bin/sh
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# Provides: rpiruninit
|
||||
# Required-Start: #adjust
|
||||
# Required-Stop: #adjust
|
||||
# Default-Start: 2 3 4 5
|
||||
# Default-Stop: 0 1 6
|
||||
### END INIT INFO
|
||||
|
||||
DESC="Raspberry Pi Startup Script Deamon"
|
||||
NAME="rpiruninit"
|
||||
|
||||
PID=`pidof -o %PPID -x rpi_startup.sh`
|
||||
OPRUNINIT='/usr/rpi/scripts/rpi_startup.sh'
|
||||
|
||||
d_stop() {
|
||||
if [ $PID ]
|
||||
then
|
||||
kill $PID
|
||||
else
|
||||
echo "$DESC: $NAME not running."
|
||||
fi
|
||||
}
|
||||
|
||||
d_start() {
|
||||
if [ $PID ]
|
||||
then
|
||||
echo "$DESC: $NAME already running."
|
||||
else
|
||||
$OPRUNINIT
|
||||
fi
|
||||
}
|
||||
|
||||
d_reload() {
|
||||
if [ $PID ]
|
||||
then
|
||||
kill -HUP $PID
|
||||
else
|
||||
echo "$DESC: $NAME not running."
|
||||
fi
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
echo -n "Starting $DESC: $NAME"
|
||||
d_start
|
||||
echo "."
|
||||
;;
|
||||
stop)
|
||||
echo -n "Stopping $DESC: $NAME"
|
||||
d_stop
|
||||
echo "."
|
||||
;;
|
||||
reload)
|
||||
echo -n "Reloading $DESC: $NAME"
|
||||
d_reload
|
||||
echo "."
|
||||
;;
|
||||
restart|force-reload)
|
||||
echo -n "Restarting $DESC: $NAME"
|
||||
d_stop
|
||||
sleep 1
|
||||
d_start
|
||||
echo "."
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 {start|stop|restart|reload|force-reload}" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
@@ -0,0 +1,6 @@
|
||||
#!/bin/sh
|
||||
|
||||
OP_CHECKFILE='/etc/rpi/first-boot'
|
||||
OP_FIRSTRUN='xinit /usr/rpi/scripts/first-run-wizard.sh'
|
||||
|
||||
[ -f $OP_CHECKFILE ] && echo -e "\nOP_STARTUP: $OP_CHECKFILE exists, not first boot." || $OP_FIRSTRUN
|
||||
@@ -1,2 +0,0 @@
|
||||
EGLINFO_DEVICE_rpi = "raspberrypi"
|
||||
COMPATIBLE_HOST_rpi = "${@bb.utils.contains('MACHINE_FEATURES', 'vc4graphics', 'null', '"(.*)"', d)}"
|
||||
@@ -1,2 +0,0 @@
|
||||
EGLINFO_DEVICE_rpi = "${@bb.utils.contains('MACHINE_FEATURES', 'vc4graphics', 'generic', 'raspberrypi', d)}"
|
||||
ASNEEDED = ""
|
||||
@@ -1 +0,0 @@
|
||||
PACKAGECONFIG_append_rpi = " gbm"
|
||||
@@ -1,3 +0,0 @@
|
||||
PACKAGECONFIG_append_rpi = " gallium"
|
||||
GALLIUMDRIVERS_rpi = "vc4"
|
||||
DRIDRIVERS_rpi = ""
|
||||
@@ -1,208 +0,0 @@
|
||||
From e45bc677368d0f8d42720aad242f33f6e2687fb1 Mon Sep 17 00:00:00 2001
|
||||
From: Dom Cobley <dc4@broadcom.com>
|
||||
Date: Tue, 9 Jul 2013 09:26:26 -0400
|
||||
Subject: [PATCH 01/15] Allow applications to set next resource handle
|
||||
|
||||
This patch adds provisions in userland to
|
||||
let apps callers set the next rendereing dispmanx resource.
|
||||
It's useful for implementing, say, a buffer carousel.
|
||||
---
|
||||
interface/khronos/common/khrn_client_rpc.h | 2 ++
|
||||
interface/khronos/common/khrn_int_ids.h | 2 ++
|
||||
interface/khronos/egl/egl_client.c | 30 +++++++++++++++++++++++++++---
|
||||
interface/khronos/egl/egl_client_surface.c | 24 +++++++++++++++++++++++-
|
||||
interface/khronos/egl/egl_client_surface.h | 3 ++-
|
||||
interface/khronos/egl/egl_int_impl.h | 5 +++--
|
||||
6 files changed, 59 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/interface/khronos/common/khrn_client_rpc.h b/interface/khronos/common/khrn_client_rpc.h
|
||||
index dc4351d..10ea060 100644
|
||||
--- a/interface/khronos/common/khrn_client_rpc.h
|
||||
+++ b/interface/khronos/common/khrn_client_rpc.h
|
||||
@@ -685,6 +685,7 @@ static INLINE void rpc_call12_out_ctrl(CLIENT_THREAD_STATE_T *thread,uint32_t id
|
||||
static INLINE void rpc_call13_out_ctrl(CLIENT_THREAD_STATE_T *thread,uint32_t id, uint32_t p0, uint32_t p1, uint32_t p2, uint32_t p3, uint32_t p4, uint32_t p5, uint32_t p6, uint32_t p7, uint32_t p8, uint32_t p9, uint32_t p10, uint32_t p11, void *out) { rpc_begin(thread); RPC_CALL(thread, id, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11); rpc_recv(thread, out, NULL, (RPC_RECV_FLAG_T)(RPC_RECV_FLAG_CTRL | RPC_RECV_FLAG_LEN)); rpc_end(thread); }
|
||||
static INLINE void rpc_call14_out_ctrl(CLIENT_THREAD_STATE_T *thread,uint32_t id, uint32_t p0, uint32_t p1, uint32_t p2, uint32_t p3, uint32_t p4, uint32_t p5, uint32_t p6, uint32_t p7, uint32_t p8, uint32_t p9, uint32_t p10, uint32_t p11, uint32_t p12, void *out) { rpc_begin(thread); RPC_CALL(thread, id, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12); rpc_recv(thread, out, NULL, (RPC_RECV_FLAG_T)(RPC_RECV_FLAG_CTRL | RPC_RECV_FLAG_LEN)); rpc_end(thread); }
|
||||
static INLINE void rpc_call15_out_ctrl(CLIENT_THREAD_STATE_T *thread,uint32_t id, uint32_t p0, uint32_t p1, uint32_t p2, uint32_t p3, uint32_t p4, uint32_t p5, uint32_t p6, uint32_t p7, uint32_t p8, uint32_t p9, uint32_t p10, uint32_t p11, uint32_t p12, uint32_t p13, void *out) { rpc_begin(thread); RPC_CALL(thread, id, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13); rpc_recv(thread, out, NULL, (RPC_RECV_FLAG_T)(RPC_RECV_FLAG_CTRL | RPC_RECV_FLAG_LEN)); rpc_end(thread); }
|
||||
+static INLINE void rpc_call16_out_ctrl(CLIENT_THREAD_STATE_T *thread,uint32_t id, uint32_t p0, uint32_t p1, uint32_t p2, uint32_t p3, uint32_t p4, uint32_t p5, uint32_t p6, uint32_t p7, uint32_t p8, uint32_t p9, uint32_t p10, uint32_t p11, uint32_t p12, uint32_t p13, uint32_t p14, void *out) { rpc_begin(thread); RPC_CALL(thread, id, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14); rpc_recv(thread, out, NULL, (RPC_RECV_FLAG_T)(RPC_RECV_FLAG_CTRL | RPC_RECV_FLAG_LEN)); rpc_end(thread); }
|
||||
#endif
|
||||
|
||||
#define RPC_CALL1_OUT_CTRL(fn, thread, id, out) rpc_call1_out_ctrl(thread, id, out)
|
||||
@@ -702,6 +703,7 @@ static INLINE void rpc_call15_out_ctrl(CLIENT_THREAD_STATE_T *thread,uint32_t id
|
||||
#define RPC_CALL13_OUT_CTRL(fn, thread, id, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, out) rpc_call13_out_ctrl(thread, id, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, out)
|
||||
#define RPC_CALL14_OUT_CTRL(fn, thread, id, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, out) rpc_call14_out_ctrl(thread, id, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, out)
|
||||
#define RPC_CALL15_OUT_CTRL(fn, thread, id, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, out) rpc_call15_out_ctrl(thread, id, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, out)
|
||||
+#define RPC_CALL16_OUT_CTRL(fn, thread, id, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, out) rpc_call16_out_ctrl(thread, id, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, out)
|
||||
|
||||
# if !defined(__SYMBIAN32__) //use functions defined in khrpc.cpp
|
||||
static INLINE uint32_t rpc_call1_out_ctrl_res(CLIENT_THREAD_STATE_T *thread,uint32_t id, void *out) { uint32_t res; rpc_begin(thread); RPC_CALL(thread, id); res = rpc_recv(thread, out, NULL, (RPC_RECV_FLAG_T)(RPC_RECV_FLAG_RES | RPC_RECV_FLAG_CTRL | RPC_RECV_FLAG_LEN)); rpc_end(thread); return res; }
|
||||
diff --git a/interface/khronos/common/khrn_int_ids.h b/interface/khronos/common/khrn_int_ids.h
|
||||
index 8378f4a..ec961e0 100644
|
||||
--- a/interface/khronos/common/khrn_int_ids.h
|
||||
+++ b/interface/khronos/common/khrn_int_ids.h
|
||||
@@ -367,6 +367,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#define EGLINTCREATESURFACE_ID 0x4000
|
||||
+#define EGLINTCREATESURFACE_ID_V2 0x4100
|
||||
#define EGLINTCREATEGLES11_ID 0x4001
|
||||
#define EGLINTCREATEGLES20_ID 0x4002
|
||||
#define EGLINTCREATEVG_ID 0x4003
|
||||
@@ -377,6 +378,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#define EGLINTMAKECURRENT_ID 0x4008
|
||||
#define EGLINTFLUSHANDWAIT_ID 0x4009
|
||||
#define EGLINTSWAPBUFFERS_ID 0x400a
|
||||
+#define EGLINTSWAPBUFFERS_ID_V2 0x410a
|
||||
#define EGLINTSELECTMIPMAP_ID 0x400b
|
||||
#define EGLINTFLUSH_ID 0x400c
|
||||
#define EGLINTGETCOLORDATA_ID 0x400d
|
||||
diff --git a/interface/khronos/egl/egl_client.c b/interface/khronos/egl/egl_client.c
|
||||
index 9d617c8..b8bb374 100644
|
||||
--- a/interface/khronos/egl/egl_client.c
|
||||
+++ b/interface/khronos/egl/egl_client.c
|
||||
@@ -162,6 +162,17 @@ static void egl_current_release(CLIENT_PROCESS_STATE_T *process, EGL_CURRENT_T *
|
||||
void egl_gl_flush_callback(bool wait);
|
||||
void egl_vg_flush_callback(bool wait);
|
||||
|
||||
+#include "interface/vmcs_host/vc_dispmanx_types.h"
|
||||
+/**HACKHACK - give us the ability to inject a DispmanX
|
||||
+ * resource handle into the CreateWindowSurface and
|
||||
+ * SwapBuffers calls */
|
||||
+static DISPMANX_RESOURCE_HANDLE_T next_resource_handle;
|
||||
+
|
||||
+EGLAPI EGLBoolean EGLAPIENTRY eglSetNextResourceHandle(DISPMANX_RESOURCE_HANDLE_T handle)
|
||||
+{
|
||||
+ next_resource_handle = handle;
|
||||
+}
|
||||
+
|
||||
/*
|
||||
TODO: do an RPC call to make sure the Khronos vll is loaded (and that it stays loaded until eglTerminate)
|
||||
Also affects global image (and possibly others?)
|
||||
@@ -644,7 +655,8 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreateWindowSurface(EGLDisplay dpy, EGLConfig c
|
||||
false,
|
||||
EGL_NO_TEXTURE,
|
||||
EGL_NO_TEXTURE,
|
||||
- 0, 0);
|
||||
+ 0, 0,
|
||||
+ next_resource_handle);
|
||||
|
||||
if (surface) {
|
||||
if (khrn_pointer_map_insert(&process->surfaces, process->next_surface, surface)) {
|
||||
@@ -889,7 +901,7 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferSurface(EGLDisplay dpy, EGLConfig
|
||||
mipmap_texture,
|
||||
texture_format,
|
||||
texture_target,
|
||||
- 0, 0);
|
||||
+ 0, 0, 0);
|
||||
|
||||
if (surface) {
|
||||
if (khrn_pointer_map_insert(&process->surfaces, process->next_surface, surface)) {
|
||||
@@ -1031,7 +1043,7 @@ EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurface(EGLDisplay dpy, EGLConfig c
|
||||
false,
|
||||
EGL_NO_TEXTURE,
|
||||
EGL_NO_TEXTURE,
|
||||
- pixmap, ((server_handle[0] == 0) && (server_handle[1] == (uint32_t)(-1))) ? NULL : server_handle);
|
||||
+ pixmap, ((server_handle[0] == 0) && (server_handle[1] == (uint32_t)(-1))) ? NULL : server_handle, 0);
|
||||
|
||||
if (surface) {
|
||||
if (khrn_pointer_map_insert(&process->surfaces, process->next_surface, surface)) {
|
||||
@@ -2303,6 +2315,18 @@ EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers(EGLDisplay dpy, EGLSurface surf)
|
||||
|
||||
vcos_log_trace("eglSwapBuffers server call");
|
||||
|
||||
+ if (next_resource_handle)
|
||||
+ RPC_CALL7(eglIntSwapBuffers_impl,
|
||||
+ thread,
|
||||
+ EGLINTSWAPBUFFERS_ID_V2,
|
||||
+ RPC_UINT(surface->serverbuffer),
|
||||
+ RPC_UINT(surface->width),
|
||||
+ RPC_UINT(surface->height),
|
||||
+ RPC_UINT(surface->internal_handle),
|
||||
+ RPC_UINT(surface->swap_behavior == EGL_BUFFER_PRESERVED ? 1 : 0),
|
||||
+ RPC_UINT(khrn_platform_get_window_position(surface->win)),
|
||||
+ RPC_INT(next_resource_handle));
|
||||
+ else
|
||||
RPC_CALL6(eglIntSwapBuffers_impl,
|
||||
thread,
|
||||
EGLINTSWAPBUFFERS_ID,
|
||||
diff --git a/interface/khronos/egl/egl_client_surface.c b/interface/khronos/egl/egl_client_surface.c
|
||||
index 6846dfa..128325e 100644
|
||||
--- a/interface/khronos/egl/egl_client_surface.c
|
||||
+++ b/interface/khronos/egl/egl_client_surface.c
|
||||
@@ -314,7 +314,8 @@ EGL_SURFACE_T *egl_surface_create(
|
||||
EGLenum texture_format,
|
||||
EGLenum texture_target,
|
||||
EGLNativePixmapType pixmap,
|
||||
- const uint32_t *pixmap_server_handle)
|
||||
+ const uint32_t *pixmap_server_handle,
|
||||
+ DISPMANX_RESOURCE_HANDLE_T next_resource_handle)
|
||||
{
|
||||
KHRN_IMAGE_FORMAT_T color;
|
||||
KHRN_IMAGE_FORMAT_T depth;
|
||||
@@ -473,6 +474,27 @@ EGL_SURFACE_T *egl_surface_create(
|
||||
#endif
|
||||
uint32_t results[3];
|
||||
|
||||
+ if (next_resource_handle)
|
||||
+ RPC_CALL16_OUT_CTRL(eglIntCreateSurface_impl,
|
||||
+ thread,
|
||||
+ EGLINTCREATESURFACE_ID_V2,
|
||||
+ RPC_UINT(serverwin),
|
||||
+ RPC_UINT(buffers),
|
||||
+ RPC_UINT(width),
|
||||
+ RPC_UINT(height),
|
||||
+ RPC_UINT(color),
|
||||
+ RPC_UINT(depth),
|
||||
+ RPC_UINT(mask),
|
||||
+ RPC_UINT(multi),
|
||||
+ RPC_UINT(largest_pbuffer),
|
||||
+ RPC_UINT(mipmap_texture),
|
||||
+ RPC_UINT(config_depth_bits),
|
||||
+ RPC_UINT(config_stencil_bits),
|
||||
+ RPC_UINT(sem_name),
|
||||
+ RPC_UINT(type),
|
||||
+ RPC_INT(next_resource_handle),
|
||||
+ results);
|
||||
+ else
|
||||
RPC_CALL15_OUT_CTRL(eglIntCreateSurface_impl,
|
||||
thread,
|
||||
EGLINTCREATESURFACE_ID,
|
||||
diff --git a/interface/khronos/egl/egl_client_surface.h b/interface/khronos/egl/egl_client_surface.h
|
||||
index c99d44c..b5bf70a 100644
|
||||
--- a/interface/khronos/egl/egl_client_surface.h
|
||||
+++ b/interface/khronos/egl/egl_client_surface.h
|
||||
@@ -322,7 +322,8 @@ extern EGL_SURFACE_T *egl_surface_create(
|
||||
EGLenum texture_format,
|
||||
EGLenum texture_target,
|
||||
EGLNativePixmapType pixmap,
|
||||
- const uint32_t *pixmap_server_handle);
|
||||
+ const uint32_t *pixmap_server_handle,
|
||||
+ DISPMANX_RESOURCE_HANDLE_T next_resource_handle);
|
||||
extern EGL_SURFACE_T *egl_surface_from_vg_image(
|
||||
VGImage vg_handle,
|
||||
EGLSurface name,
|
||||
diff --git a/interface/khronos/egl/egl_int_impl.h b/interface/khronos/egl/egl_int_impl.h
|
||||
index 8a5734c..51b3580 100644
|
||||
--- a/interface/khronos/egl/egl_int_impl.h
|
||||
+++ b/interface/khronos/egl/egl_int_impl.h
|
||||
@@ -56,7 +56,8 @@ FN(int, eglIntCreateSurface_impl, (
|
||||
uint32_t config_stencil_bits,
|
||||
uint32_t sem,
|
||||
uint32_t type,
|
||||
- uint32_t *results))
|
||||
+ uint32_t *results,
|
||||
+ DISPMANX_RESOURCE_HANDLE_T next_resource_handle))
|
||||
|
||||
FN(int, eglIntCreatePbufferFromVGImage_impl, (
|
||||
VGImage vg_handle,
|
||||
@@ -110,7 +111,7 @@ FN(void, eglIntMakeCurrent_impl, (uint32_t pid_0, uint32_t pid_1, uint32_t glver
|
||||
FN(int, eglIntFlushAndWait_impl, (uint32_t flushgl, uint32_t flushvg))
|
||||
FN(void, eglIntFlush_impl, (uint32_t flushgl, uint32_t flushvg))
|
||||
|
||||
-FN(void, eglIntSwapBuffers_impl, (EGL_SURFACE_ID_T s, uint32_t width, uint32_t height, uint32_t handle, uint32_t preserve, uint32_t position))
|
||||
+FN(void, eglIntSwapBuffers_impl, (EGL_SURFACE_ID_T s, uint32_t width, uint32_t height, uint32_t handle, uint32_t preserve, uint32_t position, DISPMANX_RESOURCE_HANDLE_T new_back_buffer))
|
||||
FN(void, eglIntSelectMipmap_impl, (EGL_SURFACE_ID_T s, int level))
|
||||
|
||||
FN(void, eglIntGetColorData_impl, (EGL_SURFACE_ID_T s, KHRN_IMAGE_FORMAT_T format, uint32_t width, uint32_t height, int32_t stride, uint32_t y_offset, void *data))
|
||||
--
|
||||
2.15.0
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -1,28 +0,0 @@
|
||||
From cae4ff834eef23c8f23126ba4d630db395f13aee Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Mon, 10 Aug 2015 02:38:27 -0700
|
||||
Subject: [PATCH 04/15] wayland-egl: Add bcm_host to dependencies
|
||||
|
||||
It uses headers like vcos_platform_types.h but does not
|
||||
depend on module which should add the required include paths
|
||||
lets add the dependency on bcm_host module which should do it
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
interface/khronos/wayland-egl/wayland-egl.pc.in | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/interface/khronos/wayland-egl/wayland-egl.pc.in b/interface/khronos/wayland-egl/wayland-egl.pc.in
|
||||
index 8bafc15..fd259c9 100644
|
||||
--- a/interface/khronos/wayland-egl/wayland-egl.pc.in
|
||||
+++ b/interface/khronos/wayland-egl/wayland-egl.pc.in
|
||||
@@ -6,5 +6,6 @@ includedir=${prefix}/include
|
||||
Name: wayland-egl
|
||||
Description: VideoCore wayland-egl library
|
||||
Version: @PROJECT_APIVER@
|
||||
+Requires: bcm_host
|
||||
Libs: -L${libdir} -lwayland-egl
|
||||
Cflags: -I${includedir}
|
||||
--
|
||||
2.15.0
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
From 8ee4f6eedb81e9bfe0e603a21606c52f9501e609 Mon Sep 17 00:00:00 2001
|
||||
From: "Yann E. MORIN" <yann.morin.1998@free.fr>
|
||||
Date: Sat, 24 Jan 2015 22:07:19 +0100
|
||||
Subject: [PATCH 05/15] interface: remove faulty assert() to make weston happy
|
||||
at runtime
|
||||
|
||||
This was removed after a discussion on IRC with the weston guys
|
||||
('daniels' on irc.freenode.net/#wayland).
|
||||
|
||||
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
|
||||
---
|
||||
interface/vmcs_host/vc_vchi_dispmanx.c | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/interface/vmcs_host/vc_vchi_dispmanx.c b/interface/vmcs_host/vc_vchi_dispmanx.c
|
||||
index eab146e..29e0dee 100755
|
||||
--- a/interface/vmcs_host/vc_vchi_dispmanx.c
|
||||
+++ b/interface/vmcs_host/vc_vchi_dispmanx.c
|
||||
@@ -1306,7 +1306,6 @@ static void *dispmanx_notify_func( void *arg ) {
|
||||
// Decrement the use count - the corresponding "use" is in vc_dispmanx_update_submit.
|
||||
vchi_service_release(dispmanx_client.notify_handle[0]);
|
||||
if (dispmanx_client.update_callback ) {
|
||||
- vcos_assert( dispmanx_client.pending_update_handle == handle);
|
||||
dispmanx_client.update_callback(handle, dispmanx_client.update_callback_param);
|
||||
}
|
||||
} else {
|
||||
--
|
||||
2.15.0
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
From 789b0b0c04b741c21dd573b78eded970721d14c2 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Sat, 6 Feb 2016 11:10:47 -0800
|
||||
Subject: [PATCH 06/15] zero-out wl buffers in egl_surface_free
|
||||
|
||||
origins from buildroot
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
interface/khronos/egl/egl_client_surface.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/interface/khronos/egl/egl_client_surface.c b/interface/khronos/egl/egl_client_surface.c
|
||||
index 42350bf..1f923d9 100644
|
||||
--- a/interface/khronos/egl/egl_client_surface.c
|
||||
+++ b/interface/khronos/egl/egl_client_surface.c
|
||||
@@ -690,11 +690,13 @@ void egl_surface_free(EGL_SURFACE_T *surface)
|
||||
if (surface->back_wl_buffer) {
|
||||
wl_buffer_destroy(surface->back_wl_buffer->wl_buffer);
|
||||
free(surface->back_wl_buffer);
|
||||
+ surface->back_wl_buffer = 0;
|
||||
}
|
||||
|
||||
if (surface->front_wl_buffer) {
|
||||
wl_buffer_destroy(surface->front_wl_buffer->wl_buffer);
|
||||
free(surface->front_wl_buffer);
|
||||
+ surface->front_wl_buffer = 0;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
--
|
||||
2.15.0
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
From 762dd3156775f167ff0dfd44322dbb19a85822a7 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Sat, 6 Feb 2016 11:11:41 -0800
|
||||
Subject: [PATCH 07/15] initialize front back wayland buffers
|
||||
|
||||
origins from metrological wayland support
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
interface/khronos/egl/egl_client_surface.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/interface/khronos/egl/egl_client_surface.c b/interface/khronos/egl/egl_client_surface.c
|
||||
index 1f923d9..9a9582c 100644
|
||||
--- a/interface/khronos/egl/egl_client_surface.c
|
||||
+++ b/interface/khronos/egl/egl_client_surface.c
|
||||
@@ -401,11 +401,14 @@ EGL_SURFACE_T *egl_surface_create(
|
||||
#ifdef BUILD_WAYLAND
|
||||
if (type == WINDOW && wl_display) {
|
||||
surface->wl_egl_window = (struct wl_egl_window*)win;
|
||||
+ surface->front_wl_buffer = NULL;
|
||||
surface->back_wl_buffer = allocate_wl_buffer(
|
||||
surface->wl_egl_window, color);
|
||||
resource = surface->back_wl_buffer->resource;
|
||||
} else {
|
||||
surface->wl_egl_window = NULL;
|
||||
+ surface->front_wl_buffer = NULL;
|
||||
+ surface->back_wl_buffer = NULL;
|
||||
resource = DISPMANX_NO_HANDLE;
|
||||
}
|
||||
#endif
|
||||
--
|
||||
2.15.0
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
From f8929adbf95ad3d44491cf6fc8a84a686b71193e Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Sat, 6 Feb 2016 11:09:18 -0800
|
||||
Subject: [PATCH 08/15] Remove RPC_FLUSH
|
||||
|
||||
Origins from buildroot
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
interface/khronos/ext/gl_oes_egl_image_client.c | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/interface/khronos/ext/gl_oes_egl_image_client.c b/interface/khronos/ext/gl_oes_egl_image_client.c
|
||||
index f9b7287..b04ffef 100644
|
||||
--- a/interface/khronos/ext/gl_oes_egl_image_client.c
|
||||
+++ b/interface/khronos/ext/gl_oes_egl_image_client.c
|
||||
@@ -107,7 +107,6 @@ GL_API void GL_APIENTRY glEGLImageTargetTexture2DOES (GLenum target, GLeglImageO
|
||||
GLEGLIMAGETARGETTEXTURE2DOES_ID,
|
||||
RPC_ENUM(target),
|
||||
RPC_EGLID(image));
|
||||
- RPC_FLUSH(thread);
|
||||
#if EGL_BRCM_global_image
|
||||
}
|
||||
#endif
|
||||
--
|
||||
2.15.0
|
||||
|
||||
@@ -1,78 +0,0 @@
|
||||
From f53e028f33f261f85883c9168977dd5486e9b47c Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Sat, 6 Feb 2016 13:12:47 -0800
|
||||
Subject: [PATCH 09/15] fix cmake dependency race
|
||||
|
||||
Fixes errors like
|
||||
|
||||
/a/builder/mnt/build-oe/tmp-glibc/work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/git/interface/vmcs_host/vc_vchi_dispmanx.h:72:66:
|
||||
fatal error: interface/vmcs_host/wayland-dispmanx-server-protocol.h: No
|
||||
such file or directory
|
||||
compilation terminated.
|
||||
interface/khronos/CMakeFiles/EGL_static.dir/build.make:773: recipe for
|
||||
target 'interface/khronos/CMakeFiles/EGL_static.dir/ext/egl_wayland.c.o'
|
||||
failed
|
||||
make[2]: ***
|
||||
[interface/khronos/CMakeFiles/EGL_static.dir/ext/egl_wayland.c.o] Error 1
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
interface/vcos/pthreads/CMakeLists.txt | 8 ++++++++
|
||||
interface/vmcs_host/CMakeLists.txt | 8 --------
|
||||
interface/vmcs_host/vc_vchi_dispmanx.h | 2 +-
|
||||
3 files changed, 9 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/interface/vcos/pthreads/CMakeLists.txt b/interface/vcos/pthreads/CMakeLists.txt
|
||||
index 1d81ca3..d6cd415 100644
|
||||
--- a/interface/vcos/pthreads/CMakeLists.txt
|
||||
+++ b/interface/vcos/pthreads/CMakeLists.txt
|
||||
@@ -33,6 +33,14 @@ set (SOURCES
|
||||
../generic/vcos_generic_blockpool.c
|
||||
)
|
||||
|
||||
+if (BUILD_WAYLAND)
|
||||
+wayland_add_protocol_server(
|
||||
+ SOURCES
|
||||
+ ../../../interface/wayland/dispmanx.xml
|
||||
+ dispmanx
|
||||
+)
|
||||
+endif ()
|
||||
+
|
||||
if (VCOS_PTHREADS_BUILD_SHARED)
|
||||
add_library (vcos SHARED ${SOURCES})
|
||||
target_link_libraries (vcos pthread dl rt)
|
||||
diff --git a/interface/vmcs_host/CMakeLists.txt b/interface/vmcs_host/CMakeLists.txt
|
||||
index 6718215..c415176 100755
|
||||
--- a/interface/vmcs_host/CMakeLists.txt
|
||||
+++ b/interface/vmcs_host/CMakeLists.txt
|
||||
@@ -17,14 +17,6 @@ set(VCHOSTIF_SOURCE
|
||||
# ${VMCS_TARGET}/vmcs_main.c
|
||||
# vc_vchi_haud.c
|
||||
|
||||
-if (BUILD_WAYLAND)
|
||||
-wayland_add_protocol_server(
|
||||
- VCHOSTIF_SOURCE
|
||||
- ../../interface/wayland/dispmanx.xml
|
||||
- dispmanx
|
||||
-)
|
||||
-endif ()
|
||||
-
|
||||
add_library(vchostif ${VCHOSTIF_SOURCE})
|
||||
|
||||
#add_library(bufman vc_vchi_bufman.c )
|
||||
diff --git a/interface/vmcs_host/vc_vchi_dispmanx.h b/interface/vmcs_host/vc_vchi_dispmanx.h
|
||||
index f0bae30..8c44c58 100644
|
||||
--- a/interface/vmcs_host/vc_vchi_dispmanx.h
|
||||
+++ b/interface/vmcs_host/vc_vchi_dispmanx.h
|
||||
@@ -69,7 +69,7 @@ typedef struct {
|
||||
#ifdef BUILD_WAYLAND
|
||||
/* XXX: This should be in a private header that can be included from EGL and vc_* */
|
||||
#include <wayland-server.h>
|
||||
-#include "interface/vmcs_host/wayland-dispmanx-server-protocol.h"
|
||||
+#include "interface/vcos/pthreads/wayland-dispmanx-server-protocol.h"
|
||||
struct wl_dispmanx_server_buffer {
|
||||
struct wl_resource *resource;
|
||||
struct wl_dispmanx *dispmanx;
|
||||
--
|
||||
2.15.0
|
||||
|
||||
@@ -1,60 +0,0 @@
|
||||
From 6559a57c66c5f55571a1aa29cf14d9130a9ef2c9 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Tue, 29 Mar 2016 20:38:30 -0700
|
||||
Subject: [PATCH 10/15] Fix for framerate with nested composition
|
||||
|
||||
frame rate appears irregular and lower than expected when using nested composition.
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
interface/khronos/egl/egl_client.c | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/interface/khronos/egl/egl_client.c b/interface/khronos/egl/egl_client.c
|
||||
index 03fe67b..13a110c 100644
|
||||
--- a/interface/khronos/egl/egl_client.c
|
||||
+++ b/interface/khronos/egl/egl_client.c
|
||||
@@ -2342,6 +2342,9 @@ EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers(EGLDisplay dpy, EGLSurface surf)
|
||||
surface->back_wl_buffer = buffer;
|
||||
}
|
||||
|
||||
+ glFlush();
|
||||
+ glFinish();
|
||||
+
|
||||
RPC_CALL7(eglIntSwapBuffers_impl,
|
||||
thread,
|
||||
EGLINTSWAPBUFFERS_ID_V2,
|
||||
@@ -2353,6 +2356,8 @@ EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers(EGLDisplay dpy, EGLSurface surf)
|
||||
RPC_UINT(khrn_platform_get_window_position(surface->win)),
|
||||
RPC_INT(surface->back_wl_buffer->resource));
|
||||
|
||||
+ RPC_FLUSH(thread);
|
||||
+
|
||||
surface->front_wl_buffer->in_use = 1;
|
||||
wl_surface_attach(wl_egl_window->wl_surface,
|
||||
surface->front_wl_buffer->wl_buffer,
|
||||
@@ -2360,11 +2365,13 @@ EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers(EGLDisplay dpy, EGLSurface surf)
|
||||
wl_surface_damage(wl_egl_window->wl_surface, 0, 0,
|
||||
surface->width, surface->height);
|
||||
wl_surface_commit(wl_egl_window->wl_surface);
|
||||
+ wl_display_flush(wl_display);
|
||||
|
||||
while(ret != -1 && surface->back_wl_buffer->in_use)
|
||||
ret = wl_display_dispatch_queue(wl_display, process->wl_queue);
|
||||
} else
|
||||
#endif
|
||||
+ {
|
||||
RPC_CALL6(eglIntSwapBuffers_impl,
|
||||
thread,
|
||||
EGLINTSWAPBUFFERS_ID,
|
||||
@@ -2376,6 +2383,7 @@ EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers(EGLDisplay dpy, EGLSurface surf)
|
||||
RPC_UINT(khrn_platform_get_window_position(surface->win)));
|
||||
|
||||
RPC_FLUSH(thread);
|
||||
+ }
|
||||
|
||||
#ifdef ANDROID
|
||||
CLIENT_UNLOCK();
|
||||
--
|
||||
2.15.0
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
From 3e396f0b514f3acf90c02f5d55b3816028367a55 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Sat, 2 Apr 2016 10:37:24 -0700
|
||||
Subject: [PATCH 11/15] build shared library for vchostif
|
||||
|
||||
Fixes #149
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
interface/vmcs_host/CMakeLists.txt | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/interface/vmcs_host/CMakeLists.txt b/interface/vmcs_host/CMakeLists.txt
|
||||
index c415176..d0cca1a 100755
|
||||
--- a/interface/vmcs_host/CMakeLists.txt
|
||||
+++ b/interface/vmcs_host/CMakeLists.txt
|
||||
@@ -17,7 +17,7 @@ set(VCHOSTIF_SOURCE
|
||||
# ${VMCS_TARGET}/vmcs_main.c
|
||||
# vc_vchi_haud.c
|
||||
|
||||
-add_library(vchostif ${VCHOSTIF_SOURCE})
|
||||
+add_library(vchostif SHARED ${VCHOSTIF_SOURCE})
|
||||
|
||||
#add_library(bufman vc_vchi_bufman.c )
|
||||
|
||||
--
|
||||
2.15.0
|
||||
|
||||
@@ -1,92 +0,0 @@
|
||||
From f5b2263c8d65e307cb085414e08118cbbe00a94c Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Sat, 2 Apr 2016 10:54:59 -0700
|
||||
Subject: [PATCH 12/15] implement buffer wrapping interface for dispmanx
|
||||
|
||||
Courtesy: Zan Dobersek
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
interface/khronos/ext/egl_wayland.c | 42 +++++++++++++++++++++++++++++++++++++
|
||||
interface/wayland/dispmanx.xml | 10 +++++++++
|
||||
2 files changed, 52 insertions(+)
|
||||
|
||||
diff --git a/interface/khronos/ext/egl_wayland.c b/interface/khronos/ext/egl_wayland.c
|
||||
index 5730743..9ef89cd 100644
|
||||
--- a/interface/khronos/ext/egl_wayland.c
|
||||
+++ b/interface/khronos/ext/egl_wayland.c
|
||||
@@ -133,8 +133,50 @@ dispmanx_create_buffer(struct wl_client *client, struct wl_resource *resource,
|
||||
buffer->handle);
|
||||
}
|
||||
|
||||
+static void
|
||||
+dispmanx_wrap_buffer(struct wl_client *client, struct wl_resource *resource,
|
||||
+ uint32_t id, uint32_t handle, int32_t width, int32_t height,
|
||||
+ uint32_t stride, uint32_t buffer_height, uint32_t format)
|
||||
+{
|
||||
+ struct wl_dispmanx_server_buffer *buffer;
|
||||
+ VC_IMAGE_TYPE_T vc_format = get_vc_format(format);
|
||||
+ uint32_t dummy;
|
||||
+
|
||||
+ if(vc_format == VC_IMAGE_MIN) {
|
||||
+ wl_resource_post_error(resource,
|
||||
+ WL_DISPMANX_ERROR_INVALID_FORMAT,
|
||||
+ "invalid format");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ buffer = calloc(1, sizeof *buffer);
|
||||
+ if (buffer == NULL) {
|
||||
+ wl_resource_post_no_memory(resource);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ buffer->handle = handle;
|
||||
+ buffer->width = width;
|
||||
+ buffer->height = height;
|
||||
+ buffer->format = format;
|
||||
+
|
||||
+ buffer->resource = wl_resource_create(resource->client, &wl_buffer_interface,
|
||||
+ 1, id);
|
||||
+ if (!buffer->resource) {
|
||||
+ wl_resource_post_no_memory(resource);
|
||||
+ vc_dispmanx_resource_delete(buffer->handle);
|
||||
+ free(buffer);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ wl_resource_set_implementation(buffer->resource,
|
||||
+ (void (**)(void)) &dispmanx_buffer_interface,
|
||||
+ buffer, destroy_buffer);
|
||||
+}
|
||||
+
|
||||
static const struct wl_dispmanx_interface dispmanx_interface = {
|
||||
dispmanx_create_buffer,
|
||||
+ dispmanx_wrap_buffer,
|
||||
};
|
||||
|
||||
static void
|
||||
diff --git a/interface/wayland/dispmanx.xml b/interface/wayland/dispmanx.xml
|
||||
index c18626d..11ed1ef 100644
|
||||
--- a/interface/wayland/dispmanx.xml
|
||||
+++ b/interface/wayland/dispmanx.xml
|
||||
@@ -118,6 +118,16 @@
|
||||
<arg name="buffer" type="object" interface="wl_buffer"/>
|
||||
<arg name="handle" type="uint"/>
|
||||
</event>
|
||||
+
|
||||
+ <request name="wrap_buffer">
|
||||
+ <arg name="id" type="new_id" interface="wl_buffer"/>
|
||||
+ <arg name="handle" type="uint"/>
|
||||
+ <arg name="width" type="int"/>
|
||||
+ <arg name="height" type="int"/>
|
||||
+ <arg name="stride" type="uint"/>
|
||||
+ <arg name="buffer_height" type="uint"/>
|
||||
+ <arg name="format" type="uint"/>
|
||||
+ </request>
|
||||
</interface>
|
||||
|
||||
</protocol>
|
||||
--
|
||||
2.15.0
|
||||
|
||||
@@ -1,90 +0,0 @@
|
||||
From 10ba55489002c2ccdf96d221301ec059c4574811 Mon Sep 17 00:00:00 2001
|
||||
From: Jeff Wannamaker <jeff_wannamaker@cable.comcast.com>
|
||||
Date: Thu, 19 Jan 2017 18:56:07 +0000
|
||||
Subject: [PATCH 13/15] Implement triple buffering for wayland
|
||||
|
||||
Change from double to triple buffering for wayland.
|
||||
This enables higher frame rates without tearing artifacts
|
||||
by allowing both the glFinish and the buffer release
|
||||
interlock to operate without pushing the frame period
|
||||
to two vertical intervals
|
||||
|
||||
Signed-off-by: Jeff Wannamaker <jeff_wannamaker@cable.comcast.com>
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
interface/khronos/egl/egl_client.c | 3 ++-
|
||||
interface/khronos/egl/egl_client_surface.c | 8 ++++++++
|
||||
interface/khronos/egl/egl_client_surface.h | 11 +++++++++++
|
||||
3 files changed, 21 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/interface/khronos/egl/egl_client.c b/interface/khronos/egl/egl_client.c
|
||||
index 13a110c..0380274 100644
|
||||
--- a/interface/khronos/egl/egl_client.c
|
||||
+++ b/interface/khronos/egl/egl_client.c
|
||||
@@ -2323,7 +2323,8 @@ EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers(EGLDisplay dpy, EGLSurface surf)
|
||||
|
||||
buffer_temp = surface->front_wl_buffer;
|
||||
surface->front_wl_buffer = surface->back_wl_buffer;
|
||||
- surface->back_wl_buffer = buffer_temp;
|
||||
+ surface->back_wl_buffer = surface->middle_wl_buffer;
|
||||
+ surface->middle_wl_buffer = buffer_temp;
|
||||
|
||||
configid = egl_config_to_id(surface->config);
|
||||
color = egl_config_get_color_format(configid);
|
||||
diff --git a/interface/khronos/egl/egl_client_surface.c b/interface/khronos/egl/egl_client_surface.c
|
||||
index 9a9582c..10b3b04 100644
|
||||
--- a/interface/khronos/egl/egl_client_surface.c
|
||||
+++ b/interface/khronos/egl/egl_client_surface.c
|
||||
@@ -402,12 +402,14 @@ EGL_SURFACE_T *egl_surface_create(
|
||||
if (type == WINDOW && wl_display) {
|
||||
surface->wl_egl_window = (struct wl_egl_window*)win;
|
||||
surface->front_wl_buffer = NULL;
|
||||
+ surface->middle_wl_buffer = NULL;
|
||||
surface->back_wl_buffer = allocate_wl_buffer(
|
||||
surface->wl_egl_window, color);
|
||||
resource = surface->back_wl_buffer->resource;
|
||||
} else {
|
||||
surface->wl_egl_window = NULL;
|
||||
surface->front_wl_buffer = NULL;
|
||||
+ surface->middle_wl_buffer = NULL;
|
||||
surface->back_wl_buffer = NULL;
|
||||
resource = DISPMANX_NO_HANDLE;
|
||||
}
|
||||
@@ -696,6 +698,12 @@ void egl_surface_free(EGL_SURFACE_T *surface)
|
||||
surface->back_wl_buffer = 0;
|
||||
}
|
||||
|
||||
+ if (surface->middle_wl_buffer) {
|
||||
+ wl_buffer_destroy(surface->middle_wl_buffer->wl_buffer);
|
||||
+ free(surface->middle_wl_buffer);
|
||||
+ surface->middle_wl_buffer = 0;
|
||||
+ }
|
||||
+
|
||||
if (surface->front_wl_buffer) {
|
||||
wl_buffer_destroy(surface->front_wl_buffer->wl_buffer);
|
||||
free(surface->front_wl_buffer);
|
||||
diff --git a/interface/khronos/egl/egl_client_surface.h b/interface/khronos/egl/egl_client_surface.h
|
||||
index e328b77..58a3184 100644
|
||||
--- a/interface/khronos/egl/egl_client_surface.h
|
||||
+++ b/interface/khronos/egl/egl_client_surface.h
|
||||
@@ -312,6 +312,17 @@ typedef struct {
|
||||
*/
|
||||
struct wl_dispmanx_client_buffer *front_wl_buffer;
|
||||
|
||||
+ /*
|
||||
+ middle_wl_buffer
|
||||
+
|
||||
+ Validity:
|
||||
+ type == WINDOW
|
||||
+
|
||||
+ Invariant:
|
||||
+ client-side information about the wl_buffer in the middle
|
||||
+ */
|
||||
+ struct wl_dispmanx_client_buffer *middle_wl_buffer;
|
||||
+
|
||||
/*
|
||||
back_wl_buffer
|
||||
|
||||
--
|
||||
2.15.0
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
From d750c738b5c23bba24531cb713292e4ab3f2ec56 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Wed, 10 May 2017 06:39:34 +0000
|
||||
Subject: [PATCH 14/15] GLES2/gl2ext.h: Define GL_R8_EXT and GL_RG8_EXT
|
||||
|
||||
weston code uses these defines
|
||||
Upstream-Status: Pending
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
interface/khronos/include/GLES2/gl2ext.h | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/interface/khronos/include/GLES2/gl2ext.h b/interface/khronos/include/GLES2/gl2ext.h
|
||||
index 4eacf7f..283e3e1 100644
|
||||
--- a/interface/khronos/include/GLES2/gl2ext.h
|
||||
+++ b/interface/khronos/include/GLES2/gl2ext.h
|
||||
@@ -327,6 +327,9 @@ typedef void* GLeglImageOES;
|
||||
#define GL_RGBX_BRCM 0x80EE
|
||||
#endif
|
||||
|
||||
+#define GL_R8_EXT 0x8229
|
||||
+#define GL_RG8_EXT 0x822B
|
||||
+
|
||||
/* GL_EXT_texture_type_2_10_10_10_REV */
|
||||
#ifndef GL_EXT_texture_type_2_10_10_10_REV
|
||||
#define GL_UNSIGNED_INT_2_10_10_10_REV_EXT 0x8368
|
||||
--
|
||||
2.15.0
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user