This is mainly for my own notes should I misplace mine, but for anyone tinkering with I2C-GPIO...
I've tested pre and post v4.14.21 of RasPi firmware releases and there are some screwy things to know about before spending hours trying to figure out why it's not working.
First, if you want to create additional "software" i2c ports similar to that found on GPIO-2/GPIO-3 when you read the docs it'll mention the new command-line argument of bus=##; thus far I have yet to find a release that actually WORKS with bus= so assume up front that the first bus number you'll be assigned is bus=3. It's also a good idea to DISABLE i2c=on in config.txt to give you more control over the process.
Secondly, there's a flaw in the way RPi handles dyoverlay=i2c-gpio in the config file...
If you add ONE overlay instance calling it bus=3, this seemingly works fine.
Add a SECOND instance (say bus=4) and the buses will SHIFT (first one gets pushed down the list and 2nd one takes the top position) thus bus=3 as you've assigned it becomes bus 4.
To accomplish i2c instances in a somewhat stable environment, it should be done in userland (AFTER the device boots, not during.) This is done by the following:
1. Install rpi-vc.tcz which contains the executable dtoverlay program
2. TinyCore doesn't have "direct" device-tree support compiled/enabled in the kernel by default, so you'll need to clone your own with the following mount in order to build the directory structure dtoverlay is expecting to find:
mount -t configfs none /sys/kernel/config
Doing so creates a home for i2c ports to live when you reach #4 below.
3. If it's not already, you'll need to mount mmcblk0p1 where the overlays are housed (dtoverlay was not built for Tiny thus it cannot find the overlays itself.)
4. Finally, call the binary and tell it the same you would have done in config.txt (just with spaces instead of commas)
dtoverlay -d /mnt/mmcblk0p1/overlays i2c-gpio bus=3 i2c_gpio_scl=14 i2c_gpio_sda=15
* dtoverlay will leave notes about pre and post processing; disregard these.