Barnes & Noble Nook Color (barnesnoble-encore)
|
Front of Nook Color | |
| Manufacturer | Barnes & Noble |
|---|---|
| Name | Nook Color |
| Codename | barnesnoble-encore |
| Model | BNRV200 |
| Released | 2010 |
| Type | tablet |
| Hardware | |
| Chipset | TI OMAP 3621 |
| CPU | 800 MHz Cortex-A8 |
| GPU | PowerVR SGX530 |
| Display | 1024x600 |
| Storage | 8 GB |
| Memory | 512 MB |
| Architecture | armv7 |
| Software | |
Original software The software and version the device was shipped with. |
Android 2.2 |
Extended version The most recent supported version from the manufacturer. |
Android |
| FOSS bootloader | partial |
| postmarketOS | |
| Category | testing |
Mainline Instead of a Linux kernel fork, it is possible to run (Close to) Mainline. |
yes |
pmOS kernel The kernel version that runs on the device's port. |
6.13.0 |
Unixbench score Unixbench Whetstone/Dhrystone score. See Unixbench. |
0.0 |
| Device package |
|
| Kernel package |
|
Flashing Whether it is possible to flash the device with pmbootstrap flasher. |
Untested
|
|---|---|
USB Networking After connecting the device with USB to your PC, you can connect to it via telnet (initramfs) or SSH (booted system). |
Works
|
Internal storage eMMC, SD cards, UFS... |
Works
|
SD card Also includes other external storage cards. |
Works
|
Battery Whether charging and battery level reporting work. |
Partial
|
Screen Whether the display works; ideally with sleep mode and brightness control. |
Works
|
Touchscreen |
Works
|
| Multimedia | |
3D Acceleration |
Broken
|
Audio Audio playback, microphone, headset and buttons. |
Broken
|
| Connectivity | |
WiFi |
Works
|
Bluetooth |
Broken
|
| Miscellaneous | |
USB OTG USB On-The-Go or USB-C Role switching. |
Untested
|
| Sensors | |
Accelerometer Handles automatic screen rotation in many interfaces. |
Partial
|
Power Sensor Sensor to monitor current, voltage and power. Not fuel gauge! |
Untested
|
| This device is based on the TI OMAP 3621. See the SoC page for common tips, guides and troubleshooting steps |
The Nook Color was released in 2010 with a restricted interface on top of Android intended for use as an e-reader with the Barnes & Noble ecosystem. It was fairly quickly discovered that the software could be modified and several versions of CyanogenMod (now LineageOS) were produced, allowing use of the device as a tablet.
Current Status
The device can be booted from a microSD card with the OMAP mainline kernel. A specific kernel config flag must be set and the kernel built to avoid fifo underflow errors. The display turns on on the first boot, but the touchscreen is not yet fully working/ configured correctly.
Most other components on the device are either working or seemingly close to working as there are drivers for most things.
Contributors
- Scottc_vt
Users owning this device
- Scottc vt (Notes: I was able to get this ported to postmarketOS, built out the wiki page and occasionally try to make improvements.)
Building Kernel
To avoid FIFO underflow errors when the display turns back on (after turning off), the mainline kernel currently needs to be built with the CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK flag set as shown below.
CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=4
This can be found here in kernel configuration:
'Device Drivers'
-> 'Graphics support'
-> 'Direct Rendering Manager'
-> 'OMAP DRM'
-> 'Minimum FCK/PCK ratio (for scaling)'
How to enter flash mode
Installation to microSD Card
Prerequisites
- MLO - Secondary Program Loader, basically bootloader for bootloader
- uboot.bin - bootloader
- Script from the 'Background' section, below - save as 'mkcard.sh' or so
Using pmbootstrap
Follow Installation/Using pmbootstrap. When asked for the device's vendor/codename, select barnesnoble as the vendor and encore as the codename.
$ pmbootstrap install
$ pmbootstrap export
SD card setup
Mount the generated postmarketOS image(s)
This can also be done with gnome-disks, etc if you prefer.
$ sudo kpartx -a -v /tmp/postmarketOS-export/barnesnoble-encore.img
<make note of "UUID" of fat32 boot partition - need to set same value with mkfs.vfat, below>
$ lsblk -o UUID /dev/mapper/loop0p1
Prep the SD card
Ensure all existing partitions on card aren't mounted:
$ ./mkcard.sh /dev/sdx
$ partprobe /dev/sdx
Copy postmarketOS to card
Set up boot partition - pmOS_boot
$ mkfs.vfat -F 32 -n pmOS_boot -i <uuid from above> /dev/sdx1
NOTE: uuid should not contain a dash in above command, i.e. -i 1234ABCD.
Now, mount the new fat partition from /dev/sdx1.
Copy bootloader files: MLO and u-boot.bin
$ cp <dir containing bootloader files>/MLO /../pmOS_boot/
$ cp <dir containing bootloader files>/u-boot.bin.edited /../pmOS_boot/u-boot.bin
Copy kernel and initramfs to pmOS_boot partition
Mount /dev/mapper/loop0p1, or other location where above kpartx command established device.
$ cp /<dir of mounted loop part1>/pmOS_boot1/uImage /../pmOS_boot/
$ cp /<dir of mounted loop part1>/pmOS_boot1/uInitrd /../pmOS_boot/uRamdisk
pmOS_boot partition should now look like this:
$ ls -1 /../pmOS_boot/
MLO
u-boot.bin
uImage
uRamdisk
Unmount /dev/mapper/loop0p1 (exported image) and/or copy more files if desired.
Copy pmOS_root partition
$ partclone.ext4 -b -d -s /dev/mapper/loop0p2 -o /dev/sdx2
Boot!
Insert the microSD card into the Nook Color and power on.
Background
SD card partitioning/formatting requirements
- Requires using fdisk and running it with two legacy flags:
-c=dosand-u=cylinders - Process previously laid out in detail here: omappedia.com: SD_Configuration
In short, steps are as follows:
- Unmount/ensure the card isn't mounted
- Zero first sector with dd
- Run
sudo fdisk -l <sd card device>and find the size of the card in bytes, usually in the first line of output - Calculate number of cylinders
- Set number of heads, sectors and cylinders
- Create two partitions, the first one being fat, starting at cylinder 1, and being active
Script to partition card:
#! /bin/sh
# mkcard.sh v0.5
# Updated by Scott C based on script below
# (c) Copyright 2009 Graeme Gregory <dp@xora.org.uk>
# Licensed under terms of GPLv2
#
# Parts of the procedure base on the work of Denys Dmytriyenko
# http://wiki.omap.com/index.php/MMC_Boot_Format
export LC_ALL=C
if [ $# -ne 1 ]; then
echo "Usage: $0 <drive>"
exit 1;
fi
DRIVE=$1
dd if=/dev/zero of=$DRIVE bs=1024 count=1
SIZE=`fdisk -l $DRIVE | grep Disk | grep bytes | awk '{print $5}'`
echo DISK SIZE - $SIZE bytes
CYLINDERS=`echo $SIZE/255/63/512 | bc`
echo CYLINDERS - $CYLINDERS
fdisk -c=dos -u=cylinders $DRIVE <<< $'p\no\nx\nh\n255\ns\n63\nc\n'${CYLINDERS}$'\nr\nn\np\n1\n1\n+200M\nn\np\n2\n\n\nt\n1\nc\na\n1\nw\n'
Resources
- Board files in
arch/arm/mach-omap2/board-encore{,-peripherals,display}.c - Display driver in
drivers/video/omap2/displays/panel-boxer.c - CyanogenMod kernel on GitHub
- Nook Color Portal on nookDevs.com
- xdaforums.com: Nook Color - forum documenting work in years past, primarily on CyanogenMod
- Build the Original Kernel on nookdevs.com
- Zip package with Barnes & Noble source code